5

开始使用 Visual Studio 2012 RC 和 Entity Framework 5 ......绝对喜欢它,但想知道是否有更清洁的方法来做到这一点。

我想省去每次解析 XML 的中间人,并通过 .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; }
}
4

1 回答 1

5

原则上没有更好的方法。您需要两个属性 - 一个XElement用于支持持久化字符串,一个用于支持持久化字符串。如果你想减少解析和转换的数量,你需要为此实现一些基础设施。一般方法是:

  • 处理ObjectContext.ObjectMaterialized事件 - 如果物化对象是MyEFEntity解析字符串并将其保存到XElement属性。如果您正在使用DbContext,您仍然可以ObjectContext通过其显式实现IObjectContextAdapter
  • Override SaveChanges- 在方法中找到所有修改或插入的MyEFEntitythrough实例DbContext.ChangeTracker.GetEntries并将它们的 XML 保存到字符串属性
于 2012-06-05T20:51:04.757 回答