C#对象引用应自动更改映射字段

时间:2011-10-18 11:46:44

标签: c# oop

我尝试为我的Entity Framework Code First类编写XML<> Object Mapper。因为EF目前不支持这种自动XML序列化,所以我这样做是为了访问“Profile”对象属性并操纵底层的ProfileData字符串:

[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 个答案:

答案 0 :(得分:1)

为什么您的类不会引用Profile对象的引用,而只是在请求时序列化或反序列化?换句话说,将其更改为:

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

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