Начиная с CTP5, по-видимому, нет способа напрямую включить каскадное удаление при связывании «многие ко многим» с помощью Fluent API.
При этом вы намерены убедиться, что вы можете удалить субъект(например, запись клиента), не беспокоясь о зависимой записи в таблице соединений (т.е. Customer_CustomerRole_Mapping), тогда вам не нужно включать каскады в базе данных, так как EF Code First позаботится об удалении каскада на стороне клиента.когда дело касается связей «многие ко многим».
Например, когда вы удаляете объект Customer, EF достаточно умен, чтобы сначала отправить оператор удаления, чтобы избавиться от зависимой записи в таблице соединений, а затемотправит еще один оператор удаления, чтобы удалить запись о клиенте.
Обновление:
Из-за ошибки в CTP5 вам нужно явно нетерпеливо / лениво загрузить свойство навигации и загрузить его в контексткогда вы удалите зависимого.Например, рассмотрим эту модель:
public class User
{
public int UserId { get; set; }
public virtual ICollection Addresses { get; set; }
}
public class Address
{
public int AddressID { get; set; }
public virtual ICollection Users { get; set; }
}
Предполагая, что у нас есть Пользователь с адресом в базе данных, этот код будет выдавать:
using (EntityMappingContext context = new EntityMappingContext())
{
User user = context.Users.Find(1);
context.Users.Remove(user);
context.SaveChanges();
}
Однако этот будет отлично работатьсначала удалите запись таблицы ссылок:
using (EntityMappingContext context = new EntityMappingContext())
{
User user = context.Users.Find(1);
((IObjectContextAdapter)context).ObjectContext
.LoadProperty(user, u => u.Addresses);
context.Users.Remove(user);
context.SaveChanges();
}
Обратите внимание, что это всего лишь обходной путь, и мы сможем (мы надеемся) удалить участника без загрузки его свойства навигации.