使用 EF Core 7 的新功能,我尝试在 json 列中存储
object
,但我总是得到一个空的 json 文档{}
。
我的班级是:
public class TaskActivity
{
public int Id { get; set; }
public DateTime DateUtc { get; set; }
public int Type { get; set; }
public object Data { get; set; }
}
在
OnModelCreating
:
modelBuilder.Entity<TaskActivity>()
.OwnsOne(x => x.Data, builder => { builder.ToJson(); });
添加迁移,它会正确添加 MSSQL 表中的
Data
列:
Data = table.Column<string>(type: "nvarchar(max)", nullable: true)
当我为
Data
分配一个值,然后将新实体添加到表中时
record.Data = new {A=2, B=4};
我可以看到记录是如何真正添加的,但是
Data
包含一个空的json文档{}
。
在 SQL 表中存储动态 json 的正确方法是什么?
它与对象及其属性名称有关。尽量定义对象类型,避免在对象属性中使用Id之类的名称,因为ef core可能会将其保存为空对象,所以尽量使用Id或{yourobjectname}Id或{theparentname}Id以外的名称作为对象的属性对象。