• Nie Znaleziono Wyników

Laboratorium z PO - Zestaw 11-WPF

N/A
N/A
Protected

Academic year: 2021

Share "Laboratorium z PO - Zestaw 11-WPF"

Copied!
7
0
0

Pełen tekst

(1)

Laboratorium z przedmiotu Programowanie

Laboratorium z przedmiotu Programowanie

obiektowe - zestaw 10

obiektowe - zestaw 10

Cel zajęć. Celem zajęć jest zapoznanie się z tworzeniem aplikacji okienkowych posiadających dostęp do danych za pomocą Entity Framework

EF jest narzędziem dodatkowym, które standardowo nie jest dołączane do projektu. Aby je dodać należy skorzystać z managera pakietów NuGet. Otwieramy go przez kliknięcie prawym przyciskiem na naszym projekcie i wybierając opcję „Manage NuGet Packages...”

Pokaże nam się okienko, następnie musimy w nim odnaleźć nasz pakiet EntityFramework i go zainstalować.

Po instalacji, pakiet będzie widoczny w zakładce „References” okna „Solution Explorer”.

Zadanie. Proszę zrealizować aplikację, która powinna odznaczać się następującymi cechami:

 Aplikacja ma łączyć się z bazą danych zawierającą informacje na temat Faktur.  Aplikacje zrealizować w formie okienek WPF, tak jak było to realizowane do tej

pory. Wymagana wiedza z zestawu 8 oraz 10.

 Aplikacja ma umożliwiać dodanie nowych rekordów, które należy wpisać w osobnym oknie aplikacji.

Aby zrealizować zadanie należy wykonać następujące kroki:

1. Pierwsza część zadania polega na utworzeniu bazy danych (podobnie jak w instrukcji 10).

 Utworzyć nowy katalog „db” w projekcie. W nim będą umieszczone wszystkie elementy związane z naszą bazą, jak również modele.

(2)

 W „Visual Studio” proszę dodać nowy element do projektu o nazwie „Service-based Database”. Dodany element jednocześnie jest plikiem bazy danych „.mdf”.

Klikając dwukrotnie na plik .mdf visual studio automatycznie połączy się z usługą SQL Servera i wskaże, aby ta otworzyła bazę danych, na którą właśnie kliknęliście.

Struktura bazy danych zostanie wyświetlona w zakładce Server Explorer. Z zakładki tej wyświetlając właściwości bazy, możemy odczytać connectionstring do naszej bazy.

(3)

ConnectionString do naszej bazy należy dodać do ustawień naszej aplikacji w pliku App.config. Należy dodać wpis zgodnie z załączonym obrazkiem, jedynie musimy przekopiować z naszej bazy atrybut connectionString. Visual Studio podpowiada składnię konfiguracji w trakcie edycji.

 Plik konfiguracji po kompilacji projektu, zawsze jest dołączony do katalogu gdzie znajduje się plik .exe. Można go zmodyfikować w dowolnym czasie. Czyli np. klient, który otrzyma aplikację bez kodu będzie mógł wskazać inną bazę, na której będzie chciał pracować w dowolnym momencie.

2. Tworzymy model danych.

W naszym zadaniu wykorzystamy Entity Framework w trybie Code First, czyli w pierwszej kolejności tworzymy aplikację, a wraz z nią modele danych jako zwykłe klasy tak jak robiliśmy do tej pory. Następnie narzędzia dołączone do EF wygenerują na podstawie naszego kodu gotową bazę danych.

 Tworzymy klasy, które zostaną odwzorowane w naszej bazie (Invoice - Faktura, InvoiceItem – Pozycja Faktury).

◦ Atrybut [Key] – oznaczamy właściwość, która będzie kluczem głównym.

Atrybut [ForeignKey] – oznaczamy właściwość klucza obcego. W naszym przypadku właściwości Invoice będzie przypisana referencja do obiektu faktury, skojarzonej z pozycją na podstawie klucza obcego InvoiceId.

(4)

3. Tworzymy kontekst bazy danej.

 Tworzymy nową klasę w katalogu „db”, która będzie kontekstem naszej bazy danych, nazwa może być dowolna. W przykładzie kontekst bazy danych jest pod nazwą „InvoiceDbContext”. Klasa musi dziedziczyć po obiekcie DbContext z Entity Framework.

 Klasa ta odwzorowuje kontekst bazy danych czyli strukturę. DbSet<Invoice> Invoices oznacza, iż na bazie zostanie utworzona tabela „Invoices”, która będzie odwzorowaniem klasy Invoice.

 Istotny jest również konstruktor. Wywołanie konstruktora klasy bazowej base(„default”) przyjmuje nazwę naszego connectionStringa, który został przez nas wpisany w App.config.

(5)

4. Tworzymy bazę danych narzędziami Entity Framework.

 Gdy mamy już kontekst oraz wskazane połączenie do bazy danych możemy przystąpić do utworzenia jej struktury.

Uruchamiamy konsole NuGet-a

W konsoli wpisujemy polecenie Enable-Migrations, tworzy ona strukturę katalogów migracji oraz pliki konfiguracyjne w projekcie.

Następnie polecenie Add-Migration start tworzy nam skrypt migracyjny, który jest zbiorem poleceń do wykonania na bazie danych, tak aby baza SQL była zbieżna z waszym kontekstem („InvoiceDbContext”). Parametr „start” oznacza wersję struktury naszej bazy danych. Zmieniając coś w naszym kontekście lub klasach modeli, musimy potem utworzyć nowy skrypt migracyjny, czyli wywołujemy znów metodę Add-Migration <jakaś nazwa>. Kolejne wywołanie utworzy nam znów listę poleceń, które dostosują już istniejącą bazę danych do naszych zmian.

Ostatnia komenda to Update-Database, która wykonuje skrypty migracji na bazie danych. Po jej wykonaniu utworzona zostanie struktura naszej bazy danych, która będzie gotowa do pracy.

(6)

5. Zapytania do bazy danych.

 Od tego momentu wykonanie dowolnej operacji na bazie staje się bardzo proste w stosunku do ADO.Net z poprzednich zajęć.

Pobranie rekordów z bazy danych.

W dyrektywie using tworzymy obiekt naszego kontekstu. Pamiętajmy że

dyrektywa ta pilnuje zawsze, aby zakończyć połączenie do bazy, które nawiąże nasz kontekst.

◦ Do bazy danych odwołujemy się poprzez tablice z kontekstu oraz

wyrażenia linq.

Przedrostek db. jest wynikiem umieszczenia klasy kontekstu w katalogu

db (zmienia się namespace klasy).

ToList() jest wymagany, gdyż datagrid nie obsługuje typu DbSet<>.

Dodawanie rekordu do bazy.

◦ Dodajmy nowy obiekt jak do zwykłej listy. Z tą różnicą, że na koniec musimy wywołać metodę SaveChanges, która wyśle zmiany na bazę danych. Do wywołania tej metody można dokonywać rożnych zmian, ale pojawią się na bazie dopiero po wywołaniu tej metody. Odpowiednik Submit z SQL.

(7)

Edycja Rekordu

◦ W celu edycji należy pobrać obiekt rekordu z kontekstu, następnie zmienić wartości jego pól, a na końcu zapisać zmiany. Rekord jest powiązany z kontekstem i zmiany w trakcie wywołania metody SaveChanges zostaną odwzorowane po stronie bazy. Edytowanie kopii rekordu nie przyniesie skutku.

Zadania do domu.

1. Proszę zrealizować aplikację, która powinna odznaczać się następującymi cechami:

 Aplikacja ta ma stanowić rozszerzenie powyższej aplikacji.  Aplikacja ma umożliwiać usuwanie dowolnego wiersza tabeli.

 Aplikacja ma umożliwiać filtrowania wyników wedle wskazanych parametrów.

Cytaty

Powiązane dokumenty

OLAP (Online Analytical Processing) – to sposób tworzenia analiz i raportów na podstawie danych zbieranych on-line z różnych serwerów i baz danych oraz ich eksploracji..

• w kierunku środkowej gałęzi, jeśli klucz jest silnie większy od lewej wartości i mniejszy lub równy od prawej wartości klucza.. Dodaj element do liścia w sposób

Jeśli nie, zwraca informację o błędnej nazwie użytkownika i zmienia aktywny element formularza na okno wprowadzania tej nazwy. Jeśli tak, sprawdza, czy wprowadzone hasło jest zgodne

Konstruktor makr zawiera wykaz akcji, które można przeciągać do obszaru projektowego.... KONSTRUKTOR MAKR

Utworzone menu nawigacji możemy ustawić jako formularz startowy dla bazy... Dodawanie przycisków

 W systemach NoSQL powszechnie poświęcana jest spójność (consistency) w celu zagwarantowania wysokiej dostępności danych i szybkości działania systemu bazodanowego.. 

Relacja jest w drugiej postaci normalnej (2NF) wtedy i tylko wtedy, gdy jest w 1NF oraz każdy niekluczowy atrybut tabeli (kolumna) jest w zależny funkcyjnie od całego klucza

wybiera wszystkie rekordy z podanych kolumn z tabeli Studenci w kolejności według podanej listy kolumn niezależnie od tego, w jakiej kolejności te kolumny występowały w