2012-06-05 17 views
5

Iniziare a giocare con Visual Studio 2012 RC e Entity Framework 5 ... assolutamente adorabile, ma chiedendosi se esiste un modo di fare cleaner.Campi Entity Framework 5 e XElement

vorrei tagliare fuori la metà-uomo di parsing XML ogni volta, e l'impostazione tramite .ToString()

public class MyEFEntity 
{ 
    [NotMapped()] 
    public XElement Tags { 
     get { return XElement.Parse(tags); } 
     set { tags = value.ToString(); } } 

    [Column("Tags", TypeName = "xml"), Required] 
    public string tags { get; set; } 
} 

risposta

5

In linea di principio non c'è modo migliore. Sono necessarie due proprietà: una per XElement e una per la stringa persistente di backup. Se si desidera ridurre la quantità di analisi e conversione, è necessario implementare un'infrastruttura per tale scopo. Approccio generale sarebbe:

  • Maniglia ObjectContext.ObjectMaterialized evento - se l'oggetto è materializzato MyEFEntity stringa di analizzare e salvarlo in XElement proprietà. Se si utilizza DbContext è ancora possibile ottenere ObjectContext attraverso il suo esplicitamente implementato IObjectContextAdapter.
  • Override SaveChanges - nel metodo trovare tutte le istanze modificati o inseriti di MyEFEntity attraverso DbContext.ChangeTracker.GetEntries e salvare il loro XML per proprietà della stringa
+2

Grazie, questo funziona. Speravo solo che ci fosse un modo più elegante di farlo. Potrei investigare su un modo di farlo in modo più pulito usando attributi e un 'DbContext 'personalizzato. Se solo MS fosse open source EF. :) – Brendan