Udostępnij za pośrednictwem


Obowiązki dewelopera w zastępowaniu zachowania domyślnego

LINQ to SQL nie wymusza następujących wymagań, ale zachowanie jest niezdefiniowane, jeśli te wymagania nie są spełnione.

  • Metoda przesłaniająca nie może wywołać SubmitChanges ani Attach. LinQ to SQL zgłasza wyjątek, jeśli te metody są wywoływane w metodzie zastąpienia.

  • Metody zastępowania nie mogą służyć do uruchamiania, zatwierdzania ani zatrzymywania transakcji. Operacja SubmitChanges jest wykonywana w ramach transakcji. Zagnieżdżona transakcja wewnętrzna może zakłócać transakcję zewnętrzną. Metody przesłonięcia obciążenia mogą uruchamiać transakcję dopiero po ustaleniu, że operacja nie jest wykonywana w obiekcie Transaction.

  • Metody zastąpienia powinny być zgodne z odpowiednim optymistycznym mapowaniem współbieżności. Oczekuje się, że metoda zastąpienia zgłosi ChangeConflictException błąd, gdy wystąpi optymistyczny konflikt współbieżności. LINQ to SQL przechwytuje ten wyjątek, dzięki czemu można poprawnie przetworzyć opcję SubmitChanges dostępną na SubmitChanges.

  • Metody tworzenia (Insert) i Update zastępowania powinny wrócić wartości kolumn wygenerowanych przez bazę danych do odpowiednich elementów członkowskich obiektów po pomyślnym zakończeniu operacji.

    Jeśli na przykład Order.OrderID jest mapowany na kolumnę tożsamości (autoinkrementujący klucz podstawowy), wtedy metoda nadpisująca musi pobrać identyfikator wygenerowany przez bazę danych i ustawić członek InsertOrder() na ten identyfikator. Podobnie, człony znacznika czasu muszą być zaktualizowane do wartości wygenerowanych przez bazę danych, aby zapewnić spójność zaktualizowanych obiektów. Brak propagacji wartości generowanych przez bazę danych może powodować niespójność między bazą danych a obiektami śledzonymi przez DataContext.

  • Użytkownik jest odpowiedzialny za wywołanie poprawnego dynamicznego interfejsu API. Na przykład w metodzie przesłonięcia aktualizacji można wywołać tylko metodę ExecuteDynamicUpdate . LinQ to SQL nie wykrywa lub sprawdza, czy wywołana metoda dynamiczna jest zgodna z odpowiednią operacją. Jeśli wywoływana jest nieodpowiednia metoda (na przykład ExecuteDynamicDelete do aktualizacji obiektu), wyniki są niezdefiniowane.

  • Na koniec oczekuje się, że metoda zastępowania wykonuje operację deklarowaną. Semantyka operacji LINQ to SQL, takich jak chętne ładowanie, odroczone ładowanie i SubmitChanges) wymagają przesłonięć w celu zapewnienia usługi deklarowanej. Na przykład, nadpisanie procesu ładowania, które po prostu zwraca pustą kolekcję bez sprawdzania zawartości w bazie danych, prawdopodobnie spowoduje niespójność danych.

Zobacz także