LINQ to SQL – własna walidacja dla insert/update/delete
Po stworzeniu dzięki użyciu designera dla LINQ to SQL wchodzącego w skład VS 2008 klas zawierających strukturę tabel z bazy, do dyspozycji programisty zostaje oddany szereg metod, dzięki którym może on sprawdzić, które z pól zostało zmienione i odpowiednio zareagować. Mi jednak potrzebna była możliwość sprawdzenia zawartości kilku pól. Rozejrzałem się więc szybko na google’u i natknąłem się na metodę OnValidate().
Szybko przystąpiłem do tekstów, jednak zakończyły się one fiaskiem:
Nie odnaleziono deklaracji definiującej dla deklaracji implementującej metody częściowej „Product.OnValidate()”.
Po kolejnej chwili spędzonej na necie znalazł się winny (link). Cóż, wiele artykułów nt. LINQ zostało stworzonych w chwili jego premiery, a ja miałem (nie)szczęście akurat na taki trafić. Od tego czasu po prostu zmieniła się sygnatura tej metody. Obecnie prezentuje się ona następująco:
partial void OnValidate(System.Data.Linq.ChangeAction action);
Dodatkowy argument umożliwia obecnie rozróżnienie, z jaką operacją mamy do czynienia. A wyróżnić można:
public enum ChangeActio
{
None = 0,
Delete,
Insert,
Update
}
W tym momencie mogłem już bezproblemowo stworzyć swoją własną logikę dla dowolnego polecenia. Przykładowy kod uniemożliwiający usunięcie produktu z tabeli Products (z bazy Northwind) prezentuje się następująco:
.
