LINQ to XML w użyciu z LINQ to SQL w ASP.net

Rozszerzenia LINQ w platformie .NET potrafią w znaczny sposób zaoszczędzić czas potrzebny na wykonanie czynności bazodanowych, zwłaszcza, kiedy współpracują one ze sobą. W pewnych przypadkach bywają niezbędne, w innych stanowią funkcję wspierającą dane rozwiązanie.

Kurs ten będzie łączył w sobie zalety LINQ to XML omówionego wstępnie w poście LINQ to XML w ASP.net – wprowadzenie oraz LINQ to SQL poruszonego w LINQ to SQL w ASP.net – wprowadzenie. Sama aplikacja demonstracyjna również bazuje na poprzednich projektach, z tego względu nie będę omawiał interfejsu i podstawowych metod, które zostały już poruszone w owych kursach, a jedynie zależności między nimi.

Aplikacja ma za zadanie przy pomocy LINQ to SQL dodać nowy rekord danych do bazy danych, a następnie odczytać go przy pomocy LINQ to SQL i zapisać do nowego lub istniejącego pliku XML przy użyciu LINQ to XML. Nowym elementem będzie tutaj odczyt z bazy danych za pośrednictwem kwerendy LINQ to SQL.

Interfejs aplikacji ASP.net z LINQ to XML oraz LINQ to XML

Interfejs aplikacji ASP.net z LINQ to XML oraz LINQ to XML

Programowe korzystanie z LINQ to XML oraz LINQ to SQL

Standardowo musimy dodać wymagane w projekcie przestrzenie nazw.

Posiadając już bazę danych z odpowiednio przygotowaną tabelą oraz klasą LINQ to SQL, która się do niej odwołuje, jesteśmy w stanie bez problemu wykonać dodanie nowego rekordu do naszej bazy danych.

Tabela danych w klasie LINQ to SQL

Tabela danych w klasie LINQ to SQL



Powyższy kod jest przejrzysty i tego typu rozwiązanie zostało już opisane w poście LINQ to SQL w ASP.net – wprowadzenie.

Obsługa pliku XML bazuje na kodzie zmodyfikowanym z kursy LINQ to XML w ASP.net – wprowadzenie i uzupełnionym o wsparcie ze strony rozwiązania LINQ to SQL. Zmodyfikowany kod może wydać się na pierwszy rzut oka zawiły, jednak rozumiejąc zasady programowania obiektowego oraz znając podstawy składni SQL powinien on budzić znajome skojarzenia.

Tworzenie nowego dokumentu XML z użyciem LINQ to XML oraz LINQ to SQL

W przypadku generowania nowego pliku (jeżeli aktualnie nie istnieje na dysku serwera) tworzymy nowy dokument klasy XDocument [28] wraz z deklaracją [29] oraz elementem głównej gałęzi “dataBase”.

Następnie tworzymy obiekt dbRecord odnoszący się do wybranej tabeli [31], którą załączyliśmy w klasie LINQ to SQL. Obiekt dbRecord pozwala nam na dostęp do pól naszej tabeli. Sortowanie według ProductID [32] również jest wskazane, tym razem będziemy w stanie wygodnie dodać również tą wartość do dokumentu XML. Polecenie select [33] pełni podobną rolę jak w przypadku zapytań SQL, bez konieczności tworzenia pętli dokonuje wyboru wszystkich rekordów tabeli i zapisania ich w postaci gałęzi “dataRow”. Kolejne elementy gałęzi “dataRow” generowane są na podstawie poszczególnych pól tabeli wskazywanych przez obiekt dbRecord. Cały ten fragment kodu wykorzystuje jednocześnie rozszerzenia LINQ to XML oraz LINQ to SQL.

Dokument XML może zostać zapisany przy użyciu standardowej metody Save klasy XDocument.

Dodanie rekordu do istniejącego pliku XML z użyciem LINQ to XML oraz LINQ to SQL

Pytanie może nasuwać problem dopisania ostatniego rekordu z bazy danych do istniejącego już pliku XML. W tym celu musimy rozpocząć od utworzenia elementu “tempDataBase” [8],  który będzie stanowił element tymczasowy przechowujący właściwą gałąź rekordu danych “dataRow”. Nasze zapytanie LINQ musimy wyposażyć w polecenie where [10], które umożliwia filtrowanie rekordów zwracanych przez komendę select [12]. Pole ProductID naszej tabeli danych odznacza się niepowtarzalnością swoich wartości. W celu wyszukania ostatniego elementu dodanego do bazy danych przez LINQ to SQL skorzystać możemy z obiektu produktyTable, który posłużył do tego celu. Po wykonaniu metody SubmitChanges zawiera on już wartość ProductID dopisanego rekordu w tabeli, dzięki temu możemy wykorzystać ją w filtrowaniu where. W ten sposób wyciągany jest z bazy danych SQL tylko jeden, ostatnio dodany rekord danych.

Aby pominąć element tymczasowy “tempDataBase” przy tworzeniu dokumentu do zapisu musimy skorzystać z właściwości FirstChild [23], która pominie gałąź główną i zwróci jej pierwszy podrzędny element – w naszym przypadku mamy tylko jeden element “dataRow”, więc nie musimy się o nic martwić.

Otrzymany przy pomocy aplikacji demonstracyjnej dokument XML posiada postać niemal identyczną, jak w poprzednich kursach. Zawiera on jednak dodatkowe pole ProductID.

Dokumenty XML możemy generować na wiele sposób, w zależności od posiadanego źródła danych lub założeń, które musimy spełnić, dlatego warto zapoznać się z dostępnymi możliwościami.

Przykładowy projekt znajduje się pod linkiem: LINQ to XML oraz LINQ to SQL w ASP.net

Menu LeftMenu, login: admin, hasło: haselko

Loading Disqus Comments ...
Loading Facebook Comments ...