2010-03-25 14 views
5

Próbuję utworzyć zestaw tabel, w których faktycznie ich nie usuwamy, ale zamiast tego ustawiamy flagi archiwum. Kiedy usuwamy encję, nie należy jej usuwać, powinna być oznaczona jako zarchiwizowana.W jaki sposób uzyskać strukturę encji do pracy z flagami archiwum?

Jakie są wzorce programowania, aby to wspierać?

Wolałbym również nie musieć wdrażać własnych zapisanych procedur dla każdej tabeli, która ma te flagi archiwów, jeśli istnieje inne rozwiązanie.

Odpowiedz

1
myEntity.IsArchived = true; 
context.SaveChanges(); 

jeśli wymagania są nie do usunięcia, a następnie nie usuwać ;-)

+0

Moja troska dotyczy przede wszystkim poprawności powiązań między jednostkami. Mam nadzieję, że nie będę musiał pytać .Where (o =>! O.Archived) przeciwko każdemu związkowi. –

0

Musisz napisać swoją własną logikę, aby to zrobić, i omijać „MarkForDeletion” metody na te podmioty.

Twoja logika będzie musiała przyjąć podany obiekt, zmienić go w jakiś sposób, aby oznaczać, że jest teraz "zarchiwizowany", a następnie zapisać zmiany w kontekście.

Będziesz wtedy musiał upewnić się, że każdy kod wyciągany z DB honoruje te wartości, które oznaczają zarchiwizowany rekord.

Aby było to łatwiejsze, możesz tworzyć częściowe klasy, aby pasowały do ​​twoich klas jednostek, więc honorują one, niestandardowy interfejs. W ten sposób możesz kodować do interfejsu i nie musisz używać odbicia, aby ustawić wartości encji.

Jeśli możesz używać .NET 4.0, EF obsługuje POCO i możesz oznaczyć obiekty natywnie odpowiednimi interfejsami, co zmniejszy liczbę plików, z którymi musisz pracować.

0

Nie jestem pewien co do najlepszych praktyk, ale możesz spróbować napisać własną metodę DeleteObject i umieścić ją w jakiejś klasie (EFHelper to nazwa klasy, której używam do tego typu rzeczy). Następnie zamiast wywoływać ObjectContext.DeleteObject, wywołujesz EFHelper.DeleteObject i robisz dowolną niestandardową logikę, którą chcesz wykonać w tej metodzie. Jeśli podoba Ci się sposób, w jaki nazywasz te właściwości flagi archiwum, możesz użyć interfejsu API Reflections firmy NET, aby znaleźć właściwość archive_flag każdego obiektu EntityObject, który "usuwasz" i odpowiednio ustawić.

Powiązane problemy