添加时,实体框架核心设置拥有的实体为null

时间:2019-04-30 10:40:12

标签: c# entity-framework-core

我有以下图形:

+---------+------------------+
|        a|                 b|
+---------+------------------+
|[9, 3, 4]|        [8, 9, 10]|
|[7, 2, 4]|      [8, 2, 1, 5]|
|   [2, 4]|[8, 2, 10, 12, 20]|
+---------+------------------+

并使用fluentApi将地址配置为public class Report { public Guid Id { get; set; } public ICollection<EmployeeEntry> EmployeeEntries { get; set; } } public class EmployeeEntry { public Guid Id { get; set; } public DateTimeOffset EntryDate { get; set; } public Address Address { get; set; } } public class Address { public string City { get; set; } public string State { get; set; } } 实体的拥有实体,如下所示:

EmployeeEntry

但是当我有多个private void ConfigureEmployeeEntry(EntityTypeBuilder<EmployeeEntry> builder) { builder.OwnsOne(x => x.Address, w => { w.Property(x => x.City).HasMaxLength(100); w.Property(x => x.State).HasMaxLength(100); }); } 的相同地址并运行以下代码时:

EmployeeEntry

我遇到以下异常:

  

“ EmployeeEntry”类型的实体正在共享表   实体类型为“ report.EmployeeEntries”   “ EmployeeEntry.Address#Address”,但没有此类型的实体   具有与已标记为“已添加”的键值相同的键值。考虑   使用“ DbContextOptionsBuilder.EnableSensitiveDataLogging”来查看   键值。

正如我注意到的那样,在将报表添加到dbContext.Reports.Add(report); dbContext.SaveChanges(); 之前,EF将地址设为SaveChanges()

我正在使用EntityFramework核心的最新版本。

1 个答案:

答案 0 :(得分:4)

  

但是当我为多个EmployeeEntry使用相同的地址时

如果您指的是相同的Address 实例,则Owned Entity Types的EF Core文档明确声明当前不支持 -在{{3 }}:

  
      
  • 拥有的实体类型的实例不能由多个所有者共享(这是无法使用拥有的实体类型实现的值对象的公知方案)
  •   

因此,请确保您使用不同的实例(即使具有相同的属性值),或者不要使用拥有的实体类型,而要使用常规实体类型和关系。