• Nie Znaleziono Wyników

lab 5-model first

N/A
N/A
Protected

Academic year: 2021

Share "lab 5-model first"

Copied!
16
0
0

Pełen tekst

(1)

Baza danych sql

1. Wprowadzenie

Do tej pory operowaliście na listach. W tej instrukcji pokazane zostanie jak stworzyć bazę danych. W zadaniu skorzystamy z edytora graficznego struktury bazy danych, który automatycznie utworzy nam skrypt SQL wraz z bazą danych oraz dodatkowo utworzy modele danych.

Dodatkowo utworzymy repozytorium generyczne, które pozwoli uniknąć pisania wielokrotnie podobnych zapytań dla identycznych encji bazy danych np. pobierz rekord o zgodnym id.

1.a Model Bazy danych

W pierwszej kolejności tworzymy nowy element odpowiadający za całość komunikacji z bazą danych oraz utworzenie modeli danych. W naszym wypadku będzie to Entity freamwork.

Dodajmy w katalogu Models nowy element i wybieramy ADO.NET Entity Data Model. Pamiętamy, aby podać odpowiednią nazwę.

(2)

W naszym przypadku ponieważ w pierwszej kolejności był tworzony kod aplikacji, a więc modele danych już mamy, wybieramy aby utworzyć czysty model danych (Empty EF Designer model) lub model danych na bazie kodu (Code First model).

1.b Encje

Otwieramy nowy obiekt. Aby dodać nowy model danych klikamy prawym na tło diagramu encji i wybieramy AddNew->Entity… Doda nam nowy blok encji przyszłej bazy danych.

Pamiętajmy, aby nazwy modeli danych jak i ich pola były zgodne z dotychczasowymi modelami danych. Nie będzie trzeba bardzo zmieniać całego kodu programu.

(3)

Parametry poszczególnych pól ustawiacie w oknie Properties. Pamiętać o poprawnym

ustawieniu typu, długości znaków każdego z pól.

(4)

Dodatkowo posiadają większą ilość encji, można następnie dodać do nich powiązania w formie kluczy obcych. Klikamy prawem na tło diagramu encji, a następnie AddNew->Association…

Wskazujemy, które encje i jak mają zostać związane kluczami obcymi.

(5)
(6)

1.d Generowanie bazy danych

Przed wygenerowaniem bazy zmieńcie nazwy plików klas modeli, gdyż mogą zostać nadpisane. Posiadając już odpowiedni diagram encji można utworzyć bazę. Klikamy prawym następnie „Generate Database from Model”.

Wybieramy serwer SQL w naszym przypadku jest to lokalna baza danych w pliku razem z projektem.

Następnie należy wybrać miejsce docelowe pliku bazy danych. Najlepiej folder App_Data i podać nazwę, jeśli w tym miejscu jeszcze nie istnieje plik bazy danych.

(7)

Ostatecznie powinien wam utworzyć bazę danych oraz klasy modeli danych nadpisując już istniejące.

(8)

Prawdopodobnie tak nie będzie. W takim wypadku musimy:

Dodać plik bazy do projektu.

W ServerExplorer szukamy naszej bazy i tworzymy nowe zapytani.

(9)

2. Repozytorium generyczne.

W poprzednim zestawie należało zrobić repozytoria dla każdej z obsługiwanych zbiorów danych. W dużej części operacje na zbiorach się powtarzały. Z tego powodu można zrobić repozytorium generyczne. Jednakże w pierwszej kolejności zrobimy interfejs, który będzie dziedziczony przez modele danych i wymusi na nich posiadanie pola Id typu Guid. Co prawda wszystkie modele takowe mają, jednakże template repozytorium tego nie wie.

(10)

Nasz model dziedziczy po interfejsie IDidposable dostarczającego metody Dispose(), która zamyka połączenie z bazą danych.

(11)

Nasz tamplete przyjmuje twa typy generyczne:

• C – jest to nasz data kontekst wygenerowany na podstawie diagramu. Jest również dookreślony, gdzie C jest klasą, która dziedziczy po DBContext oraz że można stworzyć jej obiekt new().

• T – jest to typ przyjmujący model danych. Dodatkowo musi być klasą dziedziczącą po naszym IModel. Dziki temu możemy pisać zapytania do T jakby z góry posiadała pole id typu Guid.

Aby pobrać odpowiedni zbiór należy odwołać się do data kontekstu przez metodę template

.Set<T>(), która zwróci wam listę powiązaną z typem T. Dodatkowo pojawiła nam się metoda

Commit, a jej zadaniem jest uruchomienie synchronizacji pomiędzy modelem danych, a bazą danych. Bez jej wywołania zmiany nie zostaną zapisane w bazie danych.

3. Validacja i metadane

Tak jak poprzednio należy dodać odpowiednie atrybuty polom klasy modelu encji, aby uzyskać właściwą walidację danych. Jednakże klasy te są częścią wygenerowanego schematu encjii i modyfikacje w nich wprowadzone mogą zostać nadpisane. W tym celu tworzymy dodatkowe własne klasy o tych samych nazwach z dopiskiem partial class co oznacza, że może istnieć wiele definicja tej klasy w różnych plikach. Ostatecznie kompilator składa wszystkie fragmenty w jedną klasę.

Tworząc klasę z metadanymi można najprościej otworzyć jej autogenerowaną definicję w pliku .edmx diagramu encji i zapisać pod inną nazwą. Zmieniając np. dopisek Model na Metadata.

(12)

Przy zmienionej nazwie klasy należy polom nadać odpowiednie atrybuty. Następnie powiązać ją z wygenerowaną klasą modelu encji tworząc jeszcze jedną klasę o tej samej nazwie jak model, przypisać jej interfejs IModel niezbędny dla repozytoriów. Ostatecznie za pomocą atrybutu

MetadataType przekazać, aby klasa modelu encji pobrała metadane walidacji z naszej klasy Metadanych.

(13)

4. Repozytoria rozszerzające gneryczne repo.

Posiadając repozytorium generyczne możemy już z niego korzystać bez potrzeby tworzenia osobnych repozytoriów, które po nich dziedziczą. Jednakże gdy np. brakuje funkcjonalności możemy je rozszerzyć.

Jak widzimy z każdym nowym repozytorium będzie o wiele mniej pisania.

5. Użycie repozytoriów do SQL w kontrolerach.

Wykorzystywanie repozytoriów w kontrolerach dużo się nie różni, jednakże należy pilnować, aby połączenie z serwerem SQL było rozłączane po każdej akcji na kontrolerze. W innym wypadku można wykorzystać pulę limitu połączeń do serwera SQL, który odmówi wam współpracy. Można to zrealizować na dwa sposoby, albo umieszczać obiekt repozytorium w klauzuli using lub wywoływać na repo metodę dispose w trakcie kasowania całego kontrolera.

Dodatkowo należy pamiętać, aby wywołać commit na bazie danych przed końcem obsługi zdarzenia ponieważ wprowadzone zmiany nie zostaną zapamiętane.

(14)
(15)
(16)

Zadanie

• Rozszerzyć aplikację z poprzednich zajęć. I dodać obsługę bazy danych.

• Dla przypomnienia, aplikacja ma służyć do zarządzania biblioteką. Podstawową funkcjonalnością jest wyświetlanie i dodawanie książek do katalogu oraz dodawanie do nich autorów. Dodatkowo aplikacja powinna pozwalać wyszukiwać i usuwać pozycje z katalogu.

Cytaty

Powiązane dokumenty

Zbiór encji może mieć więcej niż jeden potencjalny klucz. Zazwyczaj wyróżniamy

tytuł rok długość typFilmu nazwaStudia nazwiskoGwiazdy adresGwiazdy Gwiezdne Wojny 1977 124 kolor Fox Carrie Fisher Malibu Gwiezdne Wojny 1977 124 kolor Fox Mark Hamill

/* Wypisa¢ imi¦ i nazwisko pracownika (lub pracowników je±li b¦dzie takich osób wi¦cej) bior¡cego udziaª w najwi¦kszej liczbie

Klucz potencjalny może być kluczem głównym, ale nie musi, bo kluczem głównym jest zazwyczaj kolumna lub układ kolumn, który jednoznacznie identyfikuje wiersze i jest

Sporządź diagram związków encji (ERD) w III – ciej postaci normalnej, dla relacyjnej bazy danych obsługującej całoroczny Puchar Świata w żeglarskiej klasie FINN

 dziennik (ang. log) lub dzienniki - zapisywanie wszystkich zmian w bazie danych do specjalnego dziennika (logu), aby w razie potrzeby móc:.. o dla nie zatwierdzonej

– Do obiektu mogą być dołączone typy, przy czym wszystkie obiekty jednego typu mają taką samą strukturę i zachowanie.. – W modelu zdefiniowano wiele

Klucz podstawowy relacji (ang. primary key) jest to atrybut lub zbiór atrybutów, którego wartość jednoznacznie identyfikuje krotkę relacji. Z definicji, wartość atrybutu,