实体框架5和XElement字段

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; }
}
1个回答

5
原则上没有更好的方法。您需要两个属性-一个用于XElement,另一个用于备份持久化字符串。如果您想减少解析和转换的数量,您需要实现一些基础设施。一般的方法是:
  • 处理ObjectContext.ObjectMaterialized事件-如果材料化的对象是MyEFEntity,则将其解析并保存到XElement属性中。如果您正在使用DbContext,则仍然可以通过其明确实现的IObjectContextAdapter获取ObjectContext
  • 覆盖SaveChanges-在该方法中查找所有修改或插入的MyEFEntity实例,通过DbContext.ChangeTracker.GetEntries保存它们的XML到字符串属性中。

2
谢谢,这个方法有效。我只是希望有一种更优雅的方式来完成它。也许我可以通过使用属性和自定义的DbContext来更清晰地实现这个功能。如果微软能够开源EF就好了。:) - Brendan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接