2012-06-05 14 views
5

Begann mit Visual Studio 2012 RC und Entity Framework 5 zu spielen ... absolut zu lieben, aber frage mich, ob es eine Cleaner Weg, dies zu tun.Entity Framework 5 und XElement Felder

Ich mag würde, jedes Mal wenn die Mitte-Mann von Parsen der XML auszuschneiden und sie über .ToString Einstellung()

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; } 
} 

Antwort

5

Im Prinzip gibt es keinen besseren Weg. Sie benötigen zwei Eigenschaften - eine für XElement und eine für die Unterstützung der persistenten Zeichenfolge. Wenn Sie die Anzahl der Parsing und Conversion reduzieren möchten, müssen Sie dafür einige Infrastruktur implementieren. Allgemeiner Ansatz wäre:

  • Griff ObjectContext.ObjectMaterialized Ereignis - wenn die materialisierte Objekt MyEFEntity Parse String ist und es zu XElement Eigenschaft speichern. Wenn Sie DbContext verwenden, können Sie ObjectContext durch seine explizit implementierten IObjectContextAdapter erhalten.
  • Aufschalten SaveChanges - bei dem Verfahren alle geänderten oder eingefügten Instanzen MyEFEntity durch DbContext.ChangeTracker.GetEntries finden und ihre XML-String-Eigenschaft
+2

Dank speichern, das funktioniert. Ich habe nur gehofft, dass es einen eleganteren Weg gibt, es zu tun. Ich könnte einen Weg untersuchen, dies sauberer zu machen, indem ich Attribute und einen benutzerdefinierten 'DbContext' verwende. Wenn nur MS Open-Source EF würde. :) – Brendan