Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架5和XElement字段_C#_Xml_Entity Framework_Xelement_Entity Framework 5 - Fatal编程技术网

C# 实体框架5和XElement字段

C# 实体框架5和XElement字段,c#,xml,entity-framework,xelement,entity-framework-5,C#,Xml,Entity Framework,Xelement,Entity Framework 5,开始使用Visual Studio 2012 RC和实体框架5。。。绝对喜欢它,但想知道是否有更干净的方法来做到这一点 我想省去每次解析XML的中间环节,并通过.ToString()进行设置 原则上没有更好的办法。您需要两个属性—一个用于XElement,另一个用于支持持久化字符串。如果您想减少解析和转换的数量,您需要为此实现一些基础设施。一般做法是: 处理ObjectContext.ObjectMaterialized事件-如果物化对象是MyFentity解析字符串并将其保存到XElemen

开始使用Visual Studio 2012 RC和实体框架5。。。绝对喜欢它,但想知道是否有更干净的方法来做到这一点

我想省去每次解析XML的中间环节,并通过.ToString()进行设置


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

  • 处理
    ObjectContext.ObjectMaterialized
    事件-如果物化对象是
    MyFentity
    解析字符串并将其保存到
    XElement
    属性。如果您使用的是
    DbContext
    ,您仍然可以通过显式实现的
    IObjectContextAdapter
    获取
    ObjectContext
  • 重写
    SaveChanges
    -在方法中,通过
    DbContext.ChangeTracker.GetEntries
    查找所有修改或插入的
    MyEFEntity
    实例,并将其XML保存到string属性

谢谢,这很有效。我只是希望有一种更优雅的方式。我可能会研究一种使用属性和自定义
DbContext
更干净地执行此操作的方法。要是微软能开源就好了
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; }
}