Jer*_*ook 7 entity-framework ef-code-first ef-migrations entity-framework-6 entity-framework-6.1
示例:假设我有这三个类.Foo是一个DbSet适当的实体框架的实体,而我希望我的EF的DbContext是不知道的Bar,并Baz因为我检举了Foo的酒吧财产与我组成SerializedColumn的属性.通过应用该属性,我希望EF将带有Bazes的Bar实例序列化为单个字符串字段,并在EF实现Foo时透明地将Bar反序列化为Bar对象.
public class Foo
{
public Guid Id { get; set; }
[SerializedColumn]
public Bar Bar { get; set; }
// ..
}
public class Bar
{
public string Name { get; set; }
public Baz[] Baz { get; set; }
// ..
}
public class Baz
{
public string Name { get; set; }
// ..
}
Run Code Online (Sandbox Code Playgroud)
所以Foo的表列看起来像:
[Id] [uniqueidentifier] NOT NULL
[Bar] [nvarchar](max) NULL
Run Code Online (Sandbox Code Playgroud)
当我查询一个时,Foo我会回来一个Bar已经反序列化的属性.当我插入或更新Foo的Bar没有我想想得到由EF序列化属性.我唯一要做的就是将[SerializeColumn]属性添加到属性中.
目标:
Bar属性变成指向"Bar"表的"Bar_Id"字段.相反,我想要一个nvarchar(max)"Bar"字段,它将包含一个Bar对象的序列化版本.如果这根本不可能,请在答案中说明.笔记:
ComplexType不符合我的需要.我需要深度序列化,不需要能够对已序列化的任何属性进行过滤或排序.Aka*_*ava 10
唯一的解决方案是,
public class Foo
{
public Guid Id { get; set; }
// Not Mapped attribute will make EF
// ignore this property completely
[NotMapped]
public Bar BarObject {
get;
set;
}
public string Bar{
get{
return JsonConvert.Serialize(BarObject);
}
set{
BarObject = JsonConvert.Deserialize<BarObject>(value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据@zds的建议更新
| 归档时间: |
|
| 查看次数: |
1678 次 |
| 最近记录: |