2011-10-18 28 views
1

我尝试为我的实体框架代码第一类写一个XML <> Object Mapper。由于EF不会在此刻支持这种自动XML序列化我这样做是为了访问“档案”对象属性和操纵底层ProfileData字符串:C#对象引用应自动更改映射字段

[Column(TypeName = "xml")] 
public string ProfileData { get; set; } 

[NotMapped] 
public Profile Profile 
{ 
    get { return ProfileData.DeserializeXml<Profile>(); } 
    set { ProfileData = value.SerializeXml(); } 
} 

一切工作正常,但ProfileData.DeserializeXml()返回(中课程)一个新的对象,从ProfileData字符串序列化。我认为扩展方法是不相关的我的问题,但我无论如何它张贴:

public static T DeserializeXml<T>(this string xml) where T : class, new() 
{ 
    if(string.IsNullOrWhiteSpace(xml)) return new T(); 
    var serializer = new XmlSerializer(typeof(T)); 
    using (var reader = new StringReader(xml)) 
    { 
     try { return (T)serializer.Deserialize(reader); } 
     catch { return null; } 
    } 
} 

当我想改变我的对象我这样做:

var profile = myObject.Profile; 
profile.fooVar = "test"; 

但这不会影响我的myObject的直到我这样做:

myObject.Profile = profile; 

我知道为什么,但我并不想这样做,我想......我们可以说“直接引用”到底层ProfileData字符串我的对象包装。

任何想法来存档或不可能?

回答

1

为什么您的班级没有保留对Profile对象的引用,而只是在请求时序列化或反序列化?换句话说,将其更改为:

[Column(TypeName = "xml")] 
public string ProfileData 
{ 
    get { return Profile.SerializeXml(); } 
    set { Profile = value.DeserializeXml<Profile>(); } 
} 

[NotMapped] 
public Profile Profile { get; set; } 
+0

这就是**完全**我想要的,但某种程度上没有看到。非常感谢! – Marc