У меня есть отношение «многие ко многим» между людьми и адресами
Person { Id, ... }
Address { Id, ... }
Address2Person { Id, PersonId, AddressId }
Классы, сгенерированные DBML (на диаграмме есть PK и FK):
class Person {
Id, Address2Person
}
class Address2Person {
Id, Person, PersonId, Address, AddressId
}
class Address {
Id, Address2Person
}
КогдаЯ удаляю человека, которому нужно удалить строки AddressPerson (и это легко), а также соответствующие строки адреса, но только когда нет внешних ссылок на адрес, кроме той, которая удаляется.
Может быть, было бы разумнеереализовать каскадное удаление на уровне БД, но как я могу эмулировать это в чистом LINQ 2 SQL?
Наконец-то я написал что-то вроде этого:
// finding out addresses to delete
var addressesToDelete =
(from ap in DataBase.Address2Person
group ap by ap.Address
into g
where g.All(x => x.PersonId == personId2Delete)
select g.Key).ToList();
// killing references
DataBase.Address2Person.DeleteAllOnSubmit(
DataBase.Address2Person.Where(x => x.PersonId == personId2Delete));
// killing addresses
DataBase.Address.DeleteAllOnSubmit(addressesToDelete);
Есть ли лучший способ?
Заранее спасибо!