Sim*_*ode 3 c# entity-framework-core
我有以下图表:
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; }
}
Run Code Online (Sandbox Code Playgroud)
并使用 fluentApi 我已将地址配置为实体拥有的实体,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);
});
}
Run Code Online (Sandbox Code Playgroud)
但是当我有多个相同的地址EmployeeEntry并运行以下代码时:
dbContext.Reports.Add(report);
dbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
“EmployeeEntry”类型的实体与“EmployeeEntry.Address#Address”类型的实体共享表“report.EmployeeEntries”,但没有该类型的实体具有标记为“Added”的相同键值。考虑使用 'DbContextOptionsBuilder.EnableSensitiveDataLogging' 来查看键值。
正如我注意到在SaveChanges()EF之前添加报告后,地址为null.
我正在使用最新版本的 EntityFramework 核心。
但是当我有多个 EmployeeEntry 的相同地址时
如果您的意思是同一个Address 实例,则拥有的实体类型的EF Core 文档明确指出当前不支持 - 在限制 - 当前缺点下:
- 拥有实体类型的实例不能被多个拥有者共享(这是无法使用拥有实体类型实现的值对象的众所周知的场景)
因此,要么确保使用不同的实例(即使具有相同的属性值),要么不使用拥有的实体类型,而是使用常规的实体类型和关系。
| 归档时间: |
|
| 查看次数: |
1679 次 |
| 最近记录: |