EF Core - 属性“JObject.Next”不是虚拟的
Posted
技术标签:
【中文标题】EF Core - 属性“JObject.Next”不是虚拟的【英文标题】:EF Core - Property 'JObject.Next' is not virtual 【发布时间】:2021-12-14 02:18:48 【问题描述】:我有一个使用字符串变量作为支持字段的 JObject。
public class StaticTable
public int StaticTableId get; set;
private string _staticData;
public JObject StaticData
get => JsonConvert.DeserializeObject<JObject>(string.IsNullOrEmpty(_staticData) ? "" : _staticData);
set => _staticData = value.ToString();
运行迁移时,我收到以下异常:
System.InvalidOperationException: Property 'JObject.Next' is not virtual. 'UseChangeTrackingProxies' requires all entity types to be public, unsealed, have virtual properties, and have a public or protected constructor. 'UseLazyLoadingProxies' requires only the navigation properties be virtual.
【问题讨论】:
【参考方案1】:你让 EF 感到困惑,它认为你想将 JObject
用于 Sql 数据类型,显然它抱怨是有充分理由的。
要么使用NotMapped 属性和真正的支持属性,或者更好的是,使用value converter:
值转换器允许在读取时转换属性值 从或写入数据库。这种转换可以来自一个值 到另一个相同类型的(例如,加密字符串)或从 一种类型的值到另一种类型的值(例如, 将枚举值与数据库中的字符串相互转换。)
protected override void OnModelCreating(ModelBuilder modelBuilder)
modelBuilder
.Entity<StaticTable>()
.Property(e => e.StaticData)
.HasConversion(
v => ...,
v => ...;
【讨论】:
以上是关于EF Core - 属性“JObject.Next”不是虚拟的的主要内容,如果未能解决你的问题,请参考以下文章