2012-06-05 74 views
5

開始玩Visual Studio 2012 RC和實體框架5 ...絕對喜歡它,但想知道是否有一個清潔方式來做到這一點。實體框架5和XElement字段

我想切出的中間人通過的ToString解析每次XML,並將其設定的()

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

回答

5

原則上是沒有更好的辦法。您需要兩個屬性 - 一個用於XElement,另一個用於備份持久字符串。如果你想減少解析和轉換的數量,你需要實現一些基礎設施。一般的做法是:

  • 手柄ObjectContext.ObjectMaterialized事件 - 如果物化對象爲MyEFEntity解析字符串,並將其保存到XElement財產。如果您使用的是DbContext,則仍然可以通過其明確實施的IObjectContextAdapter獲得ObjectContext
  • 覆蓋SaveChanges - 的方法找到的所有MyEFEntity修改或插入的情況下,通過DbContext.ChangeTracker.GetEntries和他們的XML保存到字符串屬性
+2

謝謝,這個作品。我只是希望有一個更優雅的做法。我可能會調查一種更乾淨地使用屬性和自定義'DbContext'的方法。如果只有MS會開源EF。 :) – Brendan