Udostępnij za pośrednictwem


N-warstwowa LINQ to SQL z użyciem usług internetowych

LINQ to SQL jest przeznaczony specjalnie do użycia w warstwie środkowej w luźno powiązanej warstwie dostępu do danych (DAL), takiej jak usługa sieci Web. Jeśli warstwa prezentacji jest ASP.NET stroną sieci Web, użyjesz LinqDataSource kontrolki serwera sieci Web do zarządzania transferem danych między interfejsem użytkownika i LINQ to SQL w warstwie środkowej. Jeśli warstwa prezentacji nie jest stroną ASP.NET, warstwa środkowa i warstwa prezentacji muszą wykonać dodatkową pracę, aby zarządzać serializacji i deserializacji danych.

Konfigurowanie linq to SQL w warstwie środkowej

W usłudze internetowej lub aplikacji n-warstwowej warstwa środkowa zawiera kontekst danych i klasy jednostek. Te klasy można utworzyć ręcznie lub przy użyciu SQLMetal.exe lub relacyjnej Projektant obiektu zgodnie z opisem w innej dokumentacji. W czasie projektowania istnieje możliwość serializacji klas jednostek. Aby uzyskać więcej informacji, zobacz How to: Make Entities Serializable (Instrukcje: tworzenie serializacji jednostek). Inną opcją jest utworzenie oddzielnego zestawu klas, które hermetyzują dane do serializacji, a następnie przeprojektuj je do tych serializacji typów podczas zwracania danych w zapytaniach LINQ.

Następnie zdefiniuj interfejs za pomocą metod, które klienci będą wywoływać w celu pobierania, wstawiania i aktualizowania danych. Metody interfejsu opakowuje zapytania LINQ. Można użyć dowolnego rodzaju mechanizmu serializacji do obsługi zdalnych wywołań metod i serializacji danych. Jedynym wymaganiem jest to, że jeśli masz relacje cykliczne lub dwukierunkowe w modelu obiektów, takie jak między klientami i zamówieniami w standardowym modelu obiektów Northwind, należy użyć serializatora, który go obsługuje. Program Windows Communication Foundation (WCF) DataContractSerializer obsługuje relacje dwukierunkowe, ale element XmlSerializer używany z usługami sieci Web innych niż WCF nie. Jeśli wybierzesz opcję używania elementu XmlSerializer, upewnij się, że model obiektów nie ma relacji cyklicznych.

Aby uzyskać więcej informacji na temat programu Windows Communication Foundation, zobacz Windows Communication Foundation Services and Usługi danych programu WCF in Visual Studio (Usługi Windows Communication Foundation i Usługi danych programu WCF w programie Visual Studio).

Zaimplementuj reguły biznesowe lub inną logikę specyficzną dla domeny przy użyciu częściowych klas i metod w DataContext klasach jednostek i, aby podłączyć do zdarzeń środowiska uruchomieniowego LINQ to SQL. Aby uzyskać więcej informacji, zobacz Implementowanie logiki biznesowej N-warstwowej.

Definiowanie typów możliwych do serializacji

Warstwa klienta lub prezentacji musi mieć definicje typów dla klas, które będą odbierane z warstwy środkowej. Te typy mogą być samymi klasami jednostek lub specjalnymi klasami, które opakowują tylko niektóre pola z klas jednostek na potrzeby komunikacji automatycznej. W każdym razie linQ to SQL jest całkowicie niezkonsekwowany sposobem, w jaki warstwa prezentacji uzyskuje te definicje typów. Na przykład warstwa prezentacji może użyć usługi WCF do automatycznego wygenerowania typów lub może mieć kopię biblioteki DLL, w której te typy są zdefiniowane, lub może po prostu zdefiniować własne wersje typów.

Pobieranie i wstawianie danych

Warstwa środkowa definiuje interfejs określający sposób uzyskiwania dostępu do danych w warstwie prezentacji. Na przykład GetProductByID(int productID), lub GetCustomers(). W warstwie środkowej treść metody zwykle tworzy nowe wystąpienie DataContextklasy , wykonuje zapytanie względem co najmniej jednej tabeli. Następnie warstwa środkowa zwraca wynik jako , gdzie T jest klasą IEnumerable<T>jednostki lub innym typem używanym do serializacji. Warstwa prezentacji nigdy nie wysyła ani nie odbiera zmiennych zapytania bezpośrednio do lub z warstwy środkowej. Dwie warstwy wymieniają wartości, obiekty i kolekcje konkretnych danych. Po otrzymaniu kolekcji warstwa prezentacji może używać linQ to Objects do wykonywania zapytań w razie potrzeby.

Podczas wstawiania danych warstwa prezentacji może skonstruować nowy obiekt i wysłać go do warstwy środkowej lub mieć warstwę środkową, tworząc obiekt na podstawie wartości, które udostępnia. Ogólnie rzecz biorąc, pobieranie i wstawianie danych w aplikacjach n-warstwowych nie różni się znacznie od procesu w aplikacjach 2-warstwowych. Aby uzyskać więcej informacji, zobacz Wykonywanie zapytań dotyczących bazy danych i wprowadzanie i przesyłanie zmian danych.

Śledzenie zmian Aktualizacje i usuwania

LinQ to SQL obsługuje optymistyczną współbieżność na podstawie sygnatur czasowych (nazwanych również RowVersions) i oryginalnych wartości. Jeśli tabele baz danych mają znaczniki czasu, aktualizacje i usunięcia wymagają niewielkiej ilości pracy w warstwie środkowej lub warstwie prezentacji. Jeśli jednak musisz użyć oryginalnych wartości do sprawdzania optymistycznej współbieżności, warstwa prezentacji jest odpowiedzialna za śledzenie tych wartości i wysyłanie ich z powrotem podczas przesyłania aktualizacji. Dzieje się tak, ponieważ zmiany wprowadzone w jednostkach w warstwie prezentacji nie są śledzone w warstwie środkowej. W rzeczywistości oryginalne pobieranie jednostki i ostatecznej aktualizacji są zwykle wykonywane przez dwa całkowicie oddzielne wystąpienia klasy DataContext.

Im większa liczba zmian, które wprowadza warstwa prezentacji, tym bardziej złożona staje się śledzenie tych zmian i pakowanie ich z powrotem do warstwy środkowej. Implementacja mechanizmu komunikowania zmian jest całkowicie do aplikacji. Jedynym wymaganiem jest to, że linQ to SQL musi mieć te oryginalne wartości, które są wymagane do optymistycznych testów współbieżności.

Aby uzyskać więcej informacji, zobacz Pobieranie danych i operacje CUD w aplikacjach N-warstwowych (LINQ to SQL).

Zobacz też