EF Core 7 Json列映射不同数据库列名的配置方法咨询
EF Core 7 原生JSON列映射自定义列名解决方案
问题场景
我们正从HasConversion手动映射JSON列的方式,迁移至EF Core 7的原生JSON列支持。原配置代码为:
builder.Property(x => x.Definition).HasConversion(x => x.ToJSON(), x => x.ToObject<ViewDefinition>());
改为EF Core 7原生配置后:
builder.OwnsOne(x => x.Definition, nb => { nb.ToJson(); });
发现实体属性Definition无法映射到数据库已有的ViewDefinition列——OwnsOne配置会忽略属性上的[Column("ViewDefinition")]特性,且常规配置方式无法直接指定列名。
解决方案
在OwnsOne的配置Lambda中,对拥有的实体属性直接调用HasColumnName指定数据库列名,修改后的代码如下:
builder.OwnsOne(x => x.Definition, nb => { nb.ToJson(); nb.Property(x => x).HasColumnName("ViewDefinition"); });
说明
这里的nb.Property(x => x)指向的是整个Definition属性对应的JSON列,通过HasColumnName可以强制覆盖EF Core默认生成的列名,实现实体属性到指定数据库JSON列的映射。
内容的提问来源于stack exchange,提问作者PaulVrugt
相关产品推荐
相关产品推荐

