我正在寻找一种方法,使一个对象成为一个集合,但是当它保存到数据库时变为一个JSON字符串。 我该如何设置Entity Framework 6.1来实现这个目标? 例如:
public class Company{
public Company(){
this.Times = new HashSet<DateTime>();
}
public int Id {get;set;}
public string Name {get;set;}
public List<DateTime> Times {get;set;}
}
公司是一个实体对象。我希望将时间以JSON字符串的形式存储在数据库中。读取时,希望将其序列化为日期时间列表。保存时,希望将列表转换回JSON字符串并保存。
DBContext
中定义复杂类型的方法如下:modelBuilder.ComplexType()
.Property(p => p.Serialized)
.HasColumnName("Times");
- Sudarshan_SMDEF6
中,我们仍然缺乏EF Core
的ValueConverters
和Property().HasConversion()
功能。 接受的答案建议为每个Collection
使用单独的“扁平化”值,这会污染Model
。 这是绝对不可取的! 这个解决方案是迄今为止最干净的解决方案。 虽然在这个自定义的Collection
实现上使用Data Annotation
Column
会污染Collection
本身,但它不应与EF
相关联。 要解决此问题,只需使用Fluent API
并在DbContext.OnModelCreating(ModelBuilder)
中添加Property(i => i.Times.Serialized).HasColumnName("Times");
即可。 - Efthymios