我正在尝试使用表拆分为以下类结构建模,其中PersonDetails
是拥有实体,即,数据库模式中没有名为PersonDetails
的表
我正在使用实体框架核心2.2
public class Person
{
public long Id { get; set; }
public PersonDetails Details { get; set; }
}
public class PersonDetails
{
public IReadOnlyCollection<Address> Addresses { get; set; }
public IReadOnlyCollection<Contact> Contacts { get; set; }
}
public class Address
{
public string Street { get; set; }
public string Suburb { get; set; }
}
public class Contact
{
public string PhoneNumber { get; set; }
public string EmailAddress { get; set; }
}
实体类型映射如下:
public class PersonTypeConfiguration : IEntityTypeConfiguration<Person>
{
public void Configure(EntityTypeBuilder<Person> builder)
{
builder.Property(p => p.Id).ValueGeneratedOnAdd();
builder.OwnsOne(p => p.Details, b =>
{
b.HasMany(p => p.Addresses).WithOne().OnDelete(DeleteBehavior.Cascade);
b.HasMany(p => p.Contacts).WithOne().OnDelete(DeleteBehavior.Cascade);
});
}
}
public class AddressTypeConfiguration : IEntityTypeConfiguration<Address>
{
public void Configure(EntityTypeBuilder<Address> builder)
{
builder.Property<string>("Id").ValueGeneratedOnAdd();
}
}
public class ContactTypeConfiguration : IEntityTypeConfiguration<Contact>
{
public void Configure(EntityTypeBuilder<Contact> builder)
{
builder.Property<int>("Id").ValueGeneratedOnAdd();
}
}
此配置会引发以下错误:
“不支持从“地址”到“ PersonDetails.Addresses”的关系,因为拥有实体类型“ PersonDetails”不能位于非所有权关系的主体上。 >
EF核心支持此映射吗?我无法在文档中找到它,但也许我错过了。
如果不支持,是否有人计划支持它?
完整示例见https://github.com/RossJayJones/entity-framework-core-samples
答案 0 :(得分:0)
这是设计不支持的。拥有的类型是聚合的一部分,并且只能从外部引用聚合根。
您仍然可以使用相同的类并使用表拆分,只是不要将PersonDetails配置为拥有的。