我有以下图形:
+---------+------------------+
| 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核心的最新版本。
答案 0 :(得分:4)
但是当我为多个EmployeeEntry使用相同的地址时
如果您指的是相同的Address
实例,则Owned Entity Types的EF Core文档明确声明当前不支持 -在{{3 }}:
- 拥有的实体类型的实例不能由多个所有者共享(这是无法使用拥有的实体类型实现的值对象的公知方案)
因此,请确保您使用不同的实例(即使具有相同的属性值),或者不要使用拥有的实体类型,而要使用常规实体类型和关系。