У меня есть много-ко-многим между лицами и адресамиLINQ to SQL. Каскад удалить sumulation
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);
Есть ли лучший способ?
Спасибо заранее!
Спасибо за ответ, я буду проверять в течение нескольких дней! –