Mam jednostkę, nazwijmy ją CommonEntity
, która ma klucz podstawowy używany jako klucz obcy w wielu innych jednostkach. W miarę rozwoju aplikacji łącza te będą nadal się rozwijać.Struktura obiektu: Sprawdź wszystkie relacje jednostki, aby użyć klucza obcego.
Chciałbym sprawdzić, czy można bezpiecznie usunąć CommonEntity
(tzn. Nie jest on używany przez żadne inne podmioty).
zdaję sobie sprawę, co mogę zrobić
if(!ce.EntityA.Any() && !ce.EntityB.Any() ... && !ce.EntityN.Any())
{
//Delete
}
ale mam nadzieję na drodze po prostu sprawdzić wszystkie relacje automatycznie, ponieważ nie podoba mi się pomysł posiadania wrócić i zmienić ten kod ręcznie za każdym razem, gdy dodajemy nową relację. Być może jest coś w EF4 +, że nie jestem świadomy?
Pomyślałem, że może być możliwe zastosowanie zakresu transakcji, aby po prostu spróbować usunąć obiekt i wycofać go, jeśli się nie powiedzie, ale nie byłem pewien, czy wystąpiły jakiekolwiek niepożądane skutki uboczne tego podejścia.
Czy istnieje lepsze podejście?
EDIT: Wygląda jak VS2012 wykorzystał EF5 choć projekt jest .NET 4, więc stworzył model z Poços mimo że zostały wygenerowane z DB.
Jeśli pozwolę, aby to się nie powiodło, czy automatycznie wycofa wszelkie udane kaskady bez zakresu transakcji? – BenC3
Znaleźliśmy odpowiedź - SaveChanges() używa transakcji, więc wszelkie awarie zostaną wycofane: http://msdn.microsoft.com/en-us/library/bb336792.aspx – BenC3
Wcale nie będzie dobrze, jeśli utrzymasz swoje jednostki otwarte ! – bytecode77