【问题标题】:Ef Core 3.1 value convertorEf Core 3.1 值转换器
【发布时间】:2020-07-08 15:06:58
【问题描述】:

我有以下代码,使用 ef 3.1 核心值转换,我收到以下错误,知道吗?

实体类型“地址”需要定义主键。如果您打算使用无密钥实体类型调用“HasNoKey()”。

 public class Person {
    public int Id { get; set; }

    [Required]
    [MaxLength(50)]
    public string FirstName { get; set; }

    [Required]
    [MaxLength(50)]
    public string LastName { get; set; }

    [Required]
    public DateTime DateOfBirth { get; set; }

    public IList<Address> Addresses { get; set; }
  }

  

  public class Address {
    public string Type { get; set; }
    public string Company { get; set; }
    public string Number { get; set; }
    public string Street { get; set; }
    public string City { get; set; }
  }

  public class PersonsConfiguration : IEntityTypeConfiguration<Person> {
    public void Configure(EntityTypeBuilder<Person> builder) {
      // This Converter will perform the conversion to and from Json to the desired type
      builder.Property(e => e.Addresses).HasConversion(
          v => JsonConvert.SerializeObject(v, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }),
          v => JsonConvert.DeserializeObject<IList<Address>>(v, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }));
    }
  }

【问题讨论】:

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


    【解决方案1】:

    您的地址类需要一个密钥。尝试添加:

     [Key]
      public int AddressKey { get; set; }
    

    到您的地址类别。

    【讨论】:

    • 谢谢,但我不想创建一个名为 Address 的表,而只是在 person 表中一个名为 Address 的字段中存储 JSON 字符串的列。我知道这可以通过支持字段来完成,但是通过价值转换寻找一个选项。
    • @NairoozNIlafdeen 你的问题解决了吗?我有同样的问题,我不知道我将如何解决它。谢谢。
    【解决方案2】:

    显然,在 EntityTypeConfiguration 中注册值转换不起作用。一旦我在 DbContext OnModelCreating 方法中注册它 - 它就开始工作了。

     protected override void OnModelCreating(ModelBuilder modelBuilder) {
      modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetAssembly(this.GetType()));
      modelBuilder.Entity<Person>()
       .Property(p => p.Address)
       .HasConversion(new JsonValueConverter<Address>());
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 2020-05-18
      相关资源
      最近更新 更多