【问题标题】:EF Core - Property 'JObject.Next' is not virtualEF Core - 属性“JObject.Next”不是虚拟的
【发布时间】: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.

【问题讨论】:

    标签: c# .net-core entity-framework-core


    【解决方案1】:

    你让 EF 感到困惑,它认为你想将 JObject 用于 Sql 数据类型,显然它抱怨是有充分理由的。

    要么使用NotMapped 属性和真正的支持属性,或者更好的是,使用value converter

    值转换器允许在读取时转换属性值 从或写入数据库。这种转换可以来自一个值 到另一个相同类型的(例如,加密字符串)或从 一种类型的值到另一种类型的值(例如, 将枚举值与数据库中的字符串相互转换。)

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder
            .Entity<StaticTable>()
            .Property(e => e.StaticData)
            .HasConversion(
                v => ...,
                v => ...;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-12
      • 2014-11-01
      • 2014-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多