【发布时间】:2019-07-05 22:01:48
【问题描述】:
我正在尝试对以下类结构进行建模,其中 PersonDetails 是使用表拆分的拥有实体,即 db 架构中没有名为 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();
}
}
此配置引发以下错误:
'不支持从 'Address' 到 'PersonDetails.Addresses' 的关系,因为拥有的实体类型 'PersonDetails' 不能位于非所有权关系的主体方。' p>
EF 核心是否支持此映射?我无法在文档中找到它,但也许我错过了。
如果不支持,有人知道是否有计划支持它吗?
完整的示例可以在这里找到https://github.com/RossJayJones/entity-framework-core-samples
【问题讨论】:
-
您找到这个问题的答案或解决方法了吗?我有同样的情况。