我有一个关于如何使用 Code First fluent API 配置与连接表的一对多关系的问题。我有一家公司,联系人对象都共享一个共同的地址对象,如下所示
Class Address {
public int AddressId
.....
}
Class Company {
public int CompanyId
......
public virtual ICollection<Address> Address
}
Class Contact {
public int ContactID
.......
public virtual ICollection<Address> Address
}
我预期的数据库结构将是
Company Table
CompanyId PK NOT NULL
.....
Contact Table
ContactId PK NOT NULL
.....
Address Table
AddressId PK NOT NULL
.....
CompanyAddress Table
CompanyId NOT NULL
AddressId NOT NULL
ContactAddress Table
ContactId NOT NULL
AddressId NOT NULL
我能够通过使用以下流利的 API 来实现这一点
modelBuilder.Entity<Company>()
.HasMany(c => c.Address)
.WithMany()
.Map(m =>
{
m => m.MapLeftKey("CompanyId")
.MapRightKey("AddressId")
.ToTable("CompanyAddress")});
modelBuilder.Entity<Contact>()
.HasMany(c => c.Address)
.WithMany()
.Map(m =>
{
m => m.MapLeftKey("ContactId")
.MapRightKey("AddressId")
.ToTable("ContactAddress")});
但是 EF 开始将 Company 和 Address 视为多对多关系,当我尝试删除 Company 或 Contacts 时,它不会删除相应的地址记录(因为 EF 将它们视为多对多),我如何定义这种类型的关系使用具有级联删除选项的 EF。我搜索了3天多,很惊讶没有人谈论或提出这种情况,所以想知道我的方法是错误的还是答案很琐碎。