EntityFramework - 将复杂属性映射到json(字符串)列

时间:2013-02-24 13:01:08

标签: c# .net entity-framework

我有以下实体:

public class SampleClass
{
  public int Id { get; set; }
  public object Args {get; set; }
}

因为Args可以是不同类型的并且不需要是可查询的,所以我想将它作为json字符串存储在数据库中。

我知道以下解决方法可以解决我的问题:

public class SampleClass
{
  public int Id { get; set; }
  public object Args { get { return Json.Deserialize(ArgsJson); } set { ArgsJson = Json.Serialize(value); } }
  public string ArgsJson {get; set; }
}

但这非常难看,因为它暴露了与模型无关的信息,而且它包含的逻辑与模型无关。

我想做的是这样的事情:

public class SampleClassMapper : EntityTypeConfiguration<SampleClass>
{
  public SampleClassMapper()
  {
    this.Property(e => e.Args).MapAs<string>(arg => Json.Serialize(arg), str => Json.Deserialize(str));
  }
}

这样做有什么好办法吗?

(我正在使用.Net 4.0与EntityFramework 5和Sql Server 2008,如果有帮助的话)

1 个答案:

答案 0 :(得分:1)

你做的方式是EF现在唯一可用的方式。目前,EF Code First没有任何简单的方法来更改对象序列化,但这可以在运行时修改EDMX文件。