У меня возник вопрос о том, как настроить отношения «один ко многим» с таблицей соединений, используя API Code First fluent. У меня есть компания, контакты объекта оба разделяют общий адрес объекта, как показано нижеОт одного до большого числа с таблицей объединения с использованием кода EF Сначала
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 начинает относиться к компании и относится как к многим, а когда я пытаюсь удалить компанию или контакты, она не удаляет соответствующую запись адреса (поскольку EF лечит их как многие для многих), как я могу определить этот тип отношений, используя EF с возможностью каскадного удаления. Я искал более трех дней и был удивлен, что никто не говорил или не поднимал сценарии такого типа, поэтому задаюсь вопросом, неправильный ли мой подход или ответ очень тривиален.
Ваш вопрос, кажется, о каскаде удаляет больше, чем многие-ко-многим. Возможно, заголовок вопроса должен быть чем-то более похожим на «Как предотвратить каскадные удаления в EF?» –