Upload
lamxuyen
View
221
Download
1
Embed Size (px)
Citation preview
Autorzy: Krzysztof Żydzik, Microsoft Certified Solutions Developer, Microsoft Certified Professional, Microsoft SpecialistTomasz Rak, Politechnika Rzeszowska, Wydział Elektrotechniki i Informatyki, Katedra Informatyki i Automatyki, Rzeszów, Polska
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.
Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie,ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.
Redaktor prowadzący: Michał Mrowiec
Projekt okładki: Studio Gravite / OlsztynObarek, Pokoński, Pazdrijowski, Zaprucki
Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: [email protected] WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/c6mvc5Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Kody źródłowe kolejnych kroków tworzenia przykładowej aplikacji dostępne są pod adresem:ftp://ftp.helion.pl/przyklady/c6mvc5.zip
ISBN: 978-83-246-9496-9
Copyright © Helion 2015
Printed in Poland.
• Kup książkę• Poleć książkę • Oceń książkę
• Księgarnia internetowa• Lubię to! » Nasza społeczność
Spis tre ciWst p ............................................................................................ 15
Rozdzia 1. C# — teoria i praktyka ................................................................... 19Wprowadzenie do j zyka C# .......................................................................................... 19
Kolejne wersje j zyka C# ......................................................................................... 20C# 2.0 (.NET Framework 2.0, Visual Studio 2005) ........................................20C# 3.0 (.NET Framework 3.5, Visual Studio 2008) ........................................20C# 4.0 (.NET Framework 4.0, Visual Studio 2010) ........................................21C# 5.0 (.NET Framework 4.5, Visual Studio 2012 oraz 2013) .......................21C# 6.0 (zapowied ) .........................................................................................21
Konwencje ............................................................................................................... 21Cel stosowania konwencji ...............................................................................22Pliki a klasy i interfejsy ...................................................................................22Wci cia ...........................................................................................................22Komentarze .....................................................................................................23Deklaracje klas, interfejsów i metod ...............................................................24Puste linie ........................................................................................................24Nawiasy klamrowe ..........................................................................................25Konwencje nazewnicze ...................................................................................25Pozosta e dobre praktyki .................................................................................26
Typy ......................................................................................................................... 26Deklaracja zmiennej ........................................................................................27Inicjalizacja zmiennej .....................................................................................28S owa kluczowe ..............................................................................................29Sta e i zmienne tylko do odczytu ....................................................................29Litera y ............................................................................................................30Typ wyliczeniowy ...........................................................................................31Konwersje typów i rzutowanie ........................................................................31Opakowywanie (boxing) i rozpakowywanie (unboxing) ................................32Warto ci zerowe oraz typy dopuszczaj ce warto ci zerowe ...........................33Typy generyczne .............................................................................................34
Tablice, a cuchy i kolekcje ..................................................................................... 34Tablice ............................................................................................................34
a cuchy .........................................................................................................36Kolekcje ..........................................................................................................37
Operatory ................................................................................................................. 38Operator trójargumentowy ?: ..........................................................................38Operator ?? ......................................................................................................40
Kup książkę Poleć książkę
4 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
Instrukcje steruj ce ................................................................................................... 40Instrukcja if .....................................................................................................40Instrukcja switch .............................................................................................41
Instrukcje iteracyjne ................................................................................................. 43P tla while ......................................................................................................43P tla do while ..................................................................................................43P tla for ...........................................................................................................44P tla foreach ...................................................................................................45Instrukcje skoku ..............................................................................................45
Klasy, obiekty, pola, metody i w a ciwo ci .............................................................. 46Klasy ...............................................................................................................46Obiekty ...........................................................................................................48Pola .................................................................................................................48Metody ............................................................................................................49W a ciwo ci ....................................................................................................52
Podstawowe poj cia zwi zane z programowaniem obiektowym ............................. 53Abstrakcja .......................................................................................................53Hermetyzacja ..................................................................................................54Dziedziczenie ..................................................................................................54Polimorfizm ....................................................................................................55
Przeci anie operatorów ........................................................................................... 56Przeci anie operatorów relacji ......................................................................57Metody Equals() i GetHashCode() ..................................................................57Przeci anie operatorów konwersji .................................................................57Przeci anie operatorów logicznych ...............................................................58Przeci anie operatorów arytmetycznych .......................................................60
Przeci anie metod ................................................................................................... 61Indeksatory ............................................................................................................... 61Klasa System.Object ................................................................................................ 63Konstruktor i destruktor ........................................................................................... 64Garbage Collector .................................................................................................... 66
Zasada dzia ania GC .......................................................................................66Podzia na generacje (przechowywanie obiektów w pami ci) ........................66
Struktury ................................................................................................................... 67Interfejsy .................................................................................................................. 68
Jawna implementacja interfejsu ......................................................................69Zwalnianie zasobów niezarz dzanych ...................................................................... 70
Interfejs IDisposable .......................................................................................70S owo kluczowe using ....................................................................................71
Delegaty, metody anonimowe, wyra enia lambda i zdarzenia ................................. 72Delegaty ..........................................................................................................72Metody anonimowe ........................................................................................74Wyra enia lambda ..........................................................................................74Zdarzenia ........................................................................................................75
Dyrektywy preprocesora .......................................................................................... 76Wyj tki ..................................................................................................................... 77
Zg aszanie wyj tków ......................................................................................77Przepe nienia arytmetyczne ............................................................................78Instrukcje checked i unchecked ......................................................................78
Przestrzenie nazw ..................................................................................................... 79Zagnie d anie przestrzeni nazw ......................................................................79Dyrektywa using .............................................................................................81Aliasy ..............................................................................................................82Zewn trzne aliasy ...........................................................................................83
Kup książkę Poleć książkę
Spis tre ci 5
Typy, metody, klasy i kolekcje uogólnione (generyczne) ........................................ 83Metody generyczne .........................................................................................84Klasy generyczne ............................................................................................84Kolekcje generyczne i interfejsy .....................................................................86Interfejs IDictionary<TKey, TValue> — s ownik ..........................................86Interfejs IEnumerable<T> ...............................................................................87Interfejs ICollection<> ....................................................................................87Interfejs IList<> ..............................................................................................87Interfejs IQueryable<> ....................................................................................88
Wyra enia regularne ................................................................................................ 89Data i czas ................................................................................................................ 90Operacje wej cia, wyj cia, foldery i pliki ................................................................. 92
Pozosta e elementy j zyka i nowo ci w wersji C# 5.0 .................................................... 93Mechanizm refleksji i atrybuty ................................................................................. 93
Atrybuty ..........................................................................................................94IEnumerable a IEnumerator ..................................................................................... 96Iteratory i s owo kluczowe yield return .................................................................... 97Inicjalizatory obiektów i kolekcji ........................................................................... 100Drzewa wyra e ..................................................................................................... 101Metody rozszerzaj ce ............................................................................................. 102Metody i klasy cz ciowe ....................................................................................... 103
Metody cz ciowe .........................................................................................104Zmienne domniemane ............................................................................................ 105Typy anonimowe .................................................................................................... 105S owa kluczowe this i base ..................................................................................... 106Typy dynamiczne ................................................................................................... 107Argumenty nazwane — Named Arguments ........................................................... 110Parametry opcjonalne ............................................................................................. 111Obs uga kontra- i kowariancji oraz s owa kluczowe in i out .................................. 111S owa kluczowe is, as i typeof ............................................................................... 114Leniwa inicjalizacja — Lazy Initialization ............................................................. 114Metody asynchroniczne — async i await ............................................................... 118Atrybuty Caller Info ............................................................................................... 119
Nowo ci w C# 6.0 ........................................................................................................ 120Konstruktory pierwotne — Primary Constructors .................................................. 120Automatyczna inicjalizacja w a ciwo ci — Initializers for Auto-properties .......... 120Dyrektywa using dla sk adowych statycznych — Using Static Members .............. 121Inicjalizatory s ownikowe — Dictionary Initializer ............................................... 121Deklaracje inline dla parametrów out — Inline Declarations for Out Params ........ 122Wyra enia dla w a ciwo ci — Property Expressions ............................................. 122Wyra enia dla metod — Method Expressions ....................................................... 122Modyfikator private protected ................................................................................ 123Kolekcje IEnumerable jako parametr — Params for Enumerables ........................ 123Jednoargumentowe sprawdzanie warto ci null — Monadic Null Checking ........... 123S owo kluczowe await w blokach catch i finally .................................................... 124Filtry wyj tków — Exception Filters ..................................................................... 124Litera y binarne i separatory cyfr — Binary Literals, Digit Separators .................. 124
Rozdzia 2. Wzorce architektoniczne .............................................................. 125Architektura wielowarstwowa ...................................................................................... 125
Architektura jednowarstwowa ................................................................................ 126Architektura dwuwarstwowa .................................................................................. 126Architektura trójwarstwowa ................................................................................... 126Architektura n-warstwowa ..................................................................................... 126
Kup książkę Poleć książkę
6 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
MVC ............................................................................................................................. 127View ....................................................................................................................... 128Controller ............................................................................................................... 128Model ..................................................................................................................... 128
Domain Model, MVC Model i ViewModel — porównanie .........................128Model pasywny a model aktywny .................................................................129
MVP ............................................................................................................................. 129Model ..................................................................................................................... 130View ....................................................................................................................... 130Presenter ................................................................................................................. 130
MVVM ......................................................................................................................... 131MVC, MVP i MVVM .................................................................................................. 131DDD ............................................................................................................................. 132SOA .............................................................................................................................. 132EDA .............................................................................................................................. 133
Rozdzia 3. Microsoft .NET Framework ........................................................... 135Struktura .NET ............................................................................................................. 135
CLI ......................................................................................................................... 136CIL ......................................................................................................................... 137CLR ........................................................................................................................ 137DLR ........................................................................................................................ 137Elementy .NET wykorzystywane w ASP.NET MVC ............................................ 138Implementacje .NET .............................................................................................. 138
Projekt Mono ................................................................................................139WPF .............................................................................................................................. 139WCF ............................................................................................................................. 140
Service Contract ..................................................................................................... 140Operation Contract ................................................................................................. 140Data Contract ......................................................................................................... 140Data Member .......................................................................................................... 140WCF Endpoint = adres + binding + contract .......................................................... 142
Silverlight ..................................................................................................................... 142Microsoft Azure ............................................................................................................ 143
Windows Azure Storage ......................................................................................... 143BLOB Storage ...............................................................................................143Table Storage ................................................................................................143Queue Storage ...............................................................................................143
Hostowanie aplikacji w Azure ................................................................................ 143Worker Role ..................................................................................................144Web Role ......................................................................................................144Web Site ........................................................................................................144Virtual Machine ............................................................................................144
Azure Service Bus .................................................................................................. 144Service Bus Relay .........................................................................................144Service Bus Queue ........................................................................................145Service Bus Topic .........................................................................................145
ASP.NET Web Forms .................................................................................................. 145ASP.NET Web Pages ................................................................................................... 146ADO.NET ..................................................................................................................... 146
Obiekt DataSet ....................................................................................................... 147Obiekty DataTable i DataRow ......................................................................147Obiekt DataRelation ......................................................................................147Obiekt DataView ..........................................................................................147
.NET Framework Data Provider ............................................................................. 147
Kup książkę Poleć książkę
Spis tre ci 7
LINQ ............................................................................................................................ 148LINQ to XML ........................................................................................................ 148LINQ to Objects ..................................................................................................... 149LINQ to SQL .......................................................................................................... 149LINQ to DataSet ..................................................................................................... 149LINQ to Entities ..................................................................................................... 149Przyk ady zapyta LINQ ........................................................................................ 150
Sk adnia metod — Method Syntax ...............................................................150Sk adnia zapyta — Query Syntax ...............................................................151
PLINQ .................................................................................................................... 151Narz dzia ORM w .NET .............................................................................................. 153
Entity Framework ................................................................................................... 153NHibernate ............................................................................................................. 153NHibernate 3 a Entity Framework 6 ....................................................................... 154Alternatywa dla Entity Framework i NHibernate ................................................... 154
Rozdzia 4. Entity Framework 6 ...................................................................... 157Podej cie do pracy z modelem danych ......................................................................... 157
Porównanie ró nych podej .................................................................................. 157Model dla podej cia Model First ............................................................................ 158Model dla podej cia Code First .............................................................................. 158
Nowo ci wprowadzane w kolejnych wersjach EF ........................................................ 159Nowo ci wprowadzone w EF 5 .............................................................................. 159Nowo ci wprowadzone w EF 6 .............................................................................. 160
Relacyjne bazy danych i EF ......................................................................................... 160Krótki opis baz relacyjnych .................................................................................... 160Relacja „jeden do wielu” ........................................................................................ 161Relacja „jeden do jednego” .................................................................................... 161Relacja „wiele do wielu” ........................................................................................ 162Relacje opcjonalne ................................................................................................. 165
Obiekty DbContext i DbSet .......................................................................................... 165DbContext i DbSet ................................................................................................. 165Metody Attach i Detach ......................................................................................... 165
Relacje poprzez klucz FK a relacje niezale ne (obiektowe) ......................................... 166Relacje poprzez klucz obcy — FK Association ..................................................... 166Relacje niezale ne — Independent Association ..................................................... 167
Odpytywanie bazy danych za pomoc EF i LINQ ........................................................ 168Wczytywanie zach anne — Eager Loading ............................................................ 168Wczytywanie leniwe — Lazy Loading .................................................................. 169Jawne adowanie — Explicit Loading .................................................................... 170Problem N+1 .......................................................................................................... 170Metoda AsNoTracking() ........................................................................................ 171Odroczone i natychmiastowe wykonanie ............................................................... 171Entity SQL ............................................................................................................. 172Bezpo rednie zapytania SQL do bazy (Direct/RAW SQL)
i procedury sk adowane w EF ............................................................................. 173Transakcje w EF ........................................................................................................... 174
ledzenie zmian ............................................................................................................ 175Migawkowe ledzenie zmian — Snapshot Change Tracking ................................. 175Dynamiczne ledzenie zmian — Dynamic Change Tracking (proxy) .................... 175
Zarz dzanie operacjami wspó bie nymi ....................................................................... 176Kaskadowe usuwanie — Cascade Delete ..................................................................... 177
Kup książkę Poleć książkę
8 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
Strategie dziedziczenia w bazie danych — TPT, TPH i TPC ....................................... 178TPH ........................................................................................................................ 178TPT ........................................................................................................................ 178TPC ........................................................................................................................ 179
SQL Logging ................................................................................................................ 179Code First Fluent API i Data Annotations .................................................................... 180Migracje ....................................................................................................................... 182
Metoda Seed ........................................................................................................... 183
Rozdzia 5. ASP.NET MVC 5 ........................................................................... 185Kolejne wersje ASP.NET MVC ................................................................................... 185
ASP.NET MVC 1 ................................................................................................... 185ASP.NET MVC 2 ................................................................................................... 185ASP.NET MVC 3 ................................................................................................... 186ASP.NET MVC 4 ................................................................................................... 186ASP.NET MVC 5 ................................................................................................... 186ASP.NET MVC 6 (zapowied ) .............................................................................. 187
Konwencje w MVC ...................................................................................................... 187Struktura projektu ................................................................................................... 187Konwencje a ASP.NET MVC ................................................................................ 188
MVC Pipeline — cie ka wywo a , handlery i modu y ............................................... 189cie ka wywo a .................................................................................................... 189
Pierwsze danie do aplikacji ASP.NET ......................................................189Podstawowe obiekty tworzone dla ka dego dania .....................................189HttpApplication ............................................................................................190
Uchwyty i modu y HTTP ....................................................................................... 193Uchwyty HTTP .............................................................................................193Modu y HTTP ...............................................................................................193HttpHandler a HttpModule ...........................................................................193
Kontroler ...................................................................................................................... 194Typy rezultatu ........................................................................................................ 194Parametry akcji ....................................................................................................... 196
danie GET .......................................................................................................... 196danie POST ........................................................................................................ 196
Filtry akcji .............................................................................................................. 197Widok ........................................................................................................................... 200
Zasady odnajdywania widoków ............................................................................. 200Folder Shared ......................................................................................................... 201Widoki cz ciowe .................................................................................................. 201Razor ...................................................................................................................... 202
Dodatkowe w a ciwo ci silnika Razor ..........................................................203ViewBag, ViewData i TempData ........................................................................... 204Widoki typowane — Strongly Typed Views .......................................................... 205HTML helpery ....................................................................................................... 208Paczki skryptów i minimalizacja — Script/CSS Bundling and Minification ......... 209
Sekcje ........................................................................................................................... 211Routing ......................................................................................................................... 214
Kolejno w routingu ............................................................................................. 214Ignorowanie cie ek ............................................................................................... 214Ograniczenia .......................................................................................................... 215Routing na podstawie atrybutów ............................................................................ 215
Prefiksy .........................................................................................................216Ograniczenia .................................................................................................217Nazywanie cie ek i generowanie linków po nazwie cie ki ........................217Obszary .........................................................................................................217
Kup książkę Poleć książkę
Spis tre ci 9
Model ........................................................................................................................... 218ViewModel ............................................................................................................. 218
Walidacja ...................................................................................................................... 222MVC Scaffolding ......................................................................................................... 223
Generowanie kontrolerów ...................................................................................... 223Generowanie widoków ........................................................................................... 227
Metody synchroniczne i asynchroniczne w MVC ........................................................ 228S owa kluczowe — Async, Await, Task ................................................................ 230
Cache ............................................................................................................................ 231Cachowanie po stronie serwera — Server Side Caching ........................................ 231
Atrybut OutputCache ....................................................................................232Cachowanie cz ciowe .................................................................................233Cachowanie rozproszone ..............................................................................233
Cachowanie po stronie klienta — Client Side Caching .......................................... 234Cachowanie w HTML 5 ......................................................................................... 234
HTML 5 Application Cache ..........................................................................234HTML 5 WebStorage ...................................................................................234
Code First Data annotations .......................................................................................... 235Bezpiecze stwo ............................................................................................................ 235
SQL Injection ......................................................................................................... 236Cross-Site Request Forgery .................................................................................... 236Cross-Site Scripting ................................................................................................ 237Over-Posting — parametr binding ......................................................................... 237
Obs uga, ledzenie i logowanie wyj tków w MVC ...................................................... 238Lokalne zarz dzanie wyj tkami ............................................................................. 238
Blok try-catch ...............................................................................................238Nadpisywanie metody OnException() w kontrolerze ...................................238
Globalne zarz dzanie wyj tkami ............................................................................ 239Klasa FilterConfig .........................................................................................239HandleError na poziomie kontrolerów i akcji ...............................................239Zwracanie widoków dostosowanych do konkretnych typów wyj tków .......240
Logowanie globalne za pomoc osobnych narz dzi ............................................... 240Identyfikacja, uwierzytelnianie i autoryzacja w MVC 5 ............................................... 241
Identyfikacja ........................................................................................................... 241Uwierzytelnianie .................................................................................................... 241Autoryzacja ............................................................................................................ 242
Role w MVC .................................................................................................242Stan aplikacji, sesje i ciasteczka ............................................................................. 242
Stan aplikacji .................................................................................................242Ciasteczka .....................................................................................................243Sesje ..............................................................................................................243
OWIN ..................................................................................................................... 244ASP.NET Identity .................................................................................................. 244WIF i uwierzytelnianie za pomoc claimów .......................................................... 245
Identity Provider, STS ..................................................................................246Strona ufaj ca — Relying Party ....................................................................246
Federated Authentication ....................................................................................... 247Windows ACS ........................................................................................................ 248OpenId i OpenAuth ................................................................................................ 249
OpenId ..........................................................................................................249OpenAuth ......................................................................................................250
Kup książkę Poleć książkę
10 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
Rozdzia 6. Web serwisy i ASP.NET Web API 2 ............................................... 251Web API 2 .................................................................................................................... 251Web API a ASP.NET MVC ......................................................................................... 252Web serwis, REST, SOAP i OData .............................................................................. 253
SOAP ..................................................................................................................... 253REST ...................................................................................................................... 253OData ..................................................................................................................... 254
CORS i JSONP ............................................................................................................. 255JSONP .................................................................................................................... 255CORS ..................................................................................................................... 255
Uruchamianie CORS w Web API .................................................................256Routing w Web API ..................................................................................................... 257
Mapowanie da na akcje b d metody w kontrolerze Web API ......................... 257Web API a Entity Framework i warstwa modelu ......................................................... 258Typy rezultatu w Web API ........................................................................................... 258
Typ void ................................................................................................................. 259HttpResponseMessage ............................................................................................ 259IHttpActionResult .................................................................................................. 260Inny dowolny typ z aplikacji .................................................................................. 260
Pobieranie danych z Web API ...................................................................................... 261Pobieranie danych po stronie serwera (.NET, C#) ................................................. 261Pobieranie danych po stronie klienta (JavaScript, jQuery, AJAX) ......................... 261
Wersjonowanie w Web API ......................................................................................... 262
Rozdzia 7. Narz dzia, licencje i ceny ............................................................. 263Serwer IIS ..................................................................................................................... 263
Kategorie dla modu ów dost pnych w IIS .............................................................. 263Pule aplikacji w IIS ................................................................................................ 264Przetwarzanie da w IIS ..................................................................................... 264
Microsoft SQL Server 2014 .......................................................................................... 264Licencjonowanie SQL Server 2014 ........................................................................ 265Ceny licencji SQL Server 2014 .............................................................................. 265Nowo ci w SQL Server 2014 ................................................................................. 266
Windows Server 2012 .................................................................................................. 267Wersje Windows Server 2012 ................................................................................ 267Licencjonowanie Windows Server 2012 ................................................................ 267Ceny Windows Server 2012 ................................................................................... 268
Microsoft Visual Studio 2013 Ultimate .......................................................................... 268Snippety ................................................................................................................. 269Page Inspector ........................................................................................................ 269Nowo ci w Visual Studio 2013 .............................................................................. 269
Poprawiony pasek przewijania ......................................................................270Podgl d definicji ...........................................................................................270Browser Link ................................................................................................270JSON Editor i JavaScript ..............................................................................271Powi zanie z Microsoft Azure ......................................................................272Wsparcie dla GIT ..........................................................................................272
Najwa niejsze skróty klawiszowe .......................................................................... 272
Rozdzia 8. Aplikacja i wdro enie .................................................................... 277Wzorce projektowe i architektoniczne wykorzystywane w .NET ................................ 277
Repozytorium ......................................................................................................... 277Wzorzec IoC ........................................................................................................... 277Repozytorium generyczne ...................................................................................... 278Wzorzec UnitOfWork ............................................................................................ 278
Kup książkę Poleć książkę
Spis tre ci 11
Przyk adowa aplikacja .................................................................................................. 278Etap 1. Krok 1. Tworzenie nowego projektu i aktualizacja pakietów .................... 279Etap 1. Krok 2. Utworzenie modelu danych ........................................................... 283
Klasa Kategoria .............................................................................................286Klasa Ogloszenie_Kategoria .........................................................................287Klasa Uzytkownik .........................................................................................287
Etap 1. Krok 3. Tworzenie klasy kontekstu ............................................................ 290Etap 1. Krok 4. Przenoszenie warstwy modelu do osobnego projektu ................... 294
Dodawanie referencji pomi dzy projektami .................................................296Ustawienie projektu startowego ....................................................................297Instalacja bibliotek dla nowego projektu .......................................................298Przenoszenie plików z modelem do osobnej warstwy (projektu) ..................299
Etap 1. Krok 5. Migracje ........................................................................................ 300Instalacja migracji .........................................................................................300Konfiguracja migracji ...................................................................................301Tworzenie migracji pocz tkowej ..................................................................302Uruchomienie pierwszej migracji .................................................................305Metoda Seed() ...............................................................................................306Zmiany w modelu i kolejna migracja ............................................................309Praca z b dami i niespójno ci w migracjach ..............................................310
Etap 1. Podsumowanie (warstwa modelu i migracje) ............................................. 311Etap 2. Krok 1. Dodawanie kontrolerów i widoków — akcja Index ...................... 311
Dodawanie kontrolera z widokami ...............................................................311Pierwsze uruchomienie aplikacji i routing ....................................................316Lista og osze (akcja Index) — aktualizacja widoku/wygl du strony ..........317Lista og osze a pobieranie danych ..............................................................321Optymalizacja listy og osze ........................................................................322
Etap 2. Krok 2. Debugowanie oraz metody AsNoTracking() i ToList() ................ 324Sprawdzanie warto ci zmiennych .................................................................325Metoda ToList() i odroczone wykonanie (Deferred Execution) ...................325Metoda AsNoTracking() ...............................................................................326
Etap 2. Krok 3. Poprawa wygl du i optymalizacja pod k tem SEO ....................... 329Poprawa wygl du strony za pomoc Twitter Bootstrap ................................329Pod wietlanie wierszy za pomoc CSS .........................................................330Optymalizacja pod k tem pozycjonowania — SEO .....................................331
Etap 2. Podsumowanie ........................................................................................... 333Etap 3. Krok 1. Poprawa architektury aplikacji ...................................................... 334
Przeniesienie zapytania LINQ do osobnej metody ........................................334Przeniesienie metody do repozytorium .........................................................334
Etap 3. Krok 2. Zastosowanie kontenera Unity — IoC .......................................... 336Wstrzykiwanie repozytorium poprzez konstruktor w kontrolerze .................336Tworzenie interfejsu dla repozytorium .........................................................337Instalacja kontenera IoC Unity ......................................................................338Wstrzykiwanie kontekstu do repozytorium ...................................................340Cykl ycia obiektu a kontener IoC ................................................................341
Etap 3. Podsumowanie ........................................................................................... 341Etap 4. Krok 1. Akcje Details, Create, Edit, Delete ................................................ 342
Details ...........................................................................................................342Metoda Details() w repozytorium .................................................................342Aktualizacja i optymalizacja SEO dla widoku Details .................................. 343Delete ............................................................................................................345Create ............................................................................................................353Edit ................................................................................................................359
Kup książkę Poleć książkę
12 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
Etap 4. Krok 2. Aktualizacja szablonu _Layout.cshtml .......................................... 365Etap 4. Krok 3. Widoki cz ciowe — PartialViews ............................................... 366Etap 4. Podsumowanie ........................................................................................... 369Etap 5. Bezpiecze stwo, uwierzytelnianie i autoryzacja dost pu ........................... 369
Uwierzytelnianie i logowanie przez portale ..................................................369Autoryzacja — role .......................................................................................372Zabezpieczanie akcji .....................................................................................373
Etap 5. Podsumowanie ........................................................................................... 380Etap 6. Stronicowanie i sortowanie ........................................................................ 381
Stronicowanie ...............................................................................................381Sortowanie ....................................................................................................388
Etap 6. Podsumowanie ........................................................................................... 392Etap 7. Og oszenia u ytkownika, kategorie, cache i ViewModel ........................... 393
Zak adka Moje og oszenia ............................................................................393Cache ............................................................................................................394Kategorie .......................................................................................................395Zastosowanie HTML helpera — Html.Action ..............................................402Zastosowanie ViewModel .............................................................................403
Etap 7. Podsumowanie ........................................................................................... 406Etap 8. Dane w JSON, zarz dzanie relacj „wiele do wielu” i attribute routing .... 407
PartialView a dane w formacie JSON lub XML ...........................................407U ycie attribute routingu ..............................................................................407Zarz dzanie relacj „wiele do wielu” i autocomplete ...................................409Dodatek na AspNetMvc.pl ............................................................................409
Etap 8. Podsumowanie ........................................................................................... 410Etap 9. Dodatek — tworzenie modelu dla podej cia Model First .......................... 410
Publikacja systemu na zewn trznym serwerze hostingowym ....................................... 415Dodawanie domeny ................................................................................................ 416Konfiguracja witryny ............................................................................................. 418Tworzenie bazy danych .......................................................................................... 421Tworzenie konta FTP ............................................................................................. 422Po czenie z baz danych poprzez SQL Server Management Studio ..................... 422Wdra anie aplikacji na serwer za pomoc Microsoft Visual Studio ...................... 423
Dodatek A Zasady i metodologie w programowaniu ........................................ 427Zasady .......................................................................................................................... 427
SOLID .................................................................................................................... 427Zasada pojedynczej odpowiedzialno ci (SRP) ..............................................427Zasada otwarte-zamkni te (OCP) .................................................................428Zasada podstawienia Liskov (LSP) ...............................................................428Zasada separacji interfejsów (ISP) ................................................................429Zasada odwrócenia zale no ci (DIP) ............................................................431
GRASP ................................................................................................................... 432Creator ..........................................................................................................433Information Expert ........................................................................................433Controller ......................................................................................................433Low Coupling ...............................................................................................433High Cohesion ..............................................................................................434Polymorphism ...............................................................................................434Pure Fabrication ............................................................................................434Indirection .....................................................................................................435Protected Variations ......................................................................................435
DRY ....................................................................................................................... 435KISS ....................................................................................................................... 436
Kup książkę Poleć książkę
Spis tre ci 13
Rule of Three .......................................................................................................... 436Separation of Concern ............................................................................................ 436YAGNI ................................................................................................................... 437MoSCoW ................................................................................................................ 437
Metodologie .................................................................................................................. 437Manifest Agile ........................................................................................................ 437Scrum ..................................................................................................................... 439eXtreme Programming ........................................................................................... 439TDD ....................................................................................................................... 440
Dodatek B HTTP i SSL/TLS ........................................................................... 443HTTP ............................................................................................................................ 443SSL/TLS ....................................................................................................................... 447
Rodzaje certyfikatów .............................................................................................. 449Zakup certyfikatu SSL ............................................................................................ 450Aktywacja, walidacja i instalacja certyfikatu SSL ................................................. 450Certyfikat w praktyce ............................................................................................. 450
Dodatek C HTML 5 i CSS 3 ........................................................................... 453HTML 5 ........................................................................................................................ 453
Sekcje ..................................................................................................................... 457Nowe typy pól formularza ...................................................................................... 458Atrybuty dla formularza ......................................................................................... 459Znaczniki ................................................................................................................ 459Web Storage ........................................................................................................... 461Server Side Events ................................................................................................. 461WebSockets ............................................................................................................ 462Drag and Drop ........................................................................................................ 463Geolokalizacja ........................................................................................................ 465Walidacja ............................................................................................................... 466
CSS 3 ............................................................................................................................ 466Nowe selektory ....................................................................................................... 471Nowe w asno ci ..................................................................................................... 472Twitter Bootstrap .................................................................................................... 473
CSS 4 ............................................................................................................................ 473
Dodatek D HTML DOM i JavaScript ................................................................ 477HTML DOM ................................................................................................................ 477
Metody dost pne w DOM ...................................................................................... 477W a ciwo ci dost pne w DOM .............................................................................. 479Poziomy DOM ....................................................................................................... 479
JavaScript ..................................................................................................................... 480Sk adnia j zyka ...................................................................................................... 480Mo liwo ci JavaScriptu ......................................................................................... 483JQuery .................................................................................................................... 484
Instalacja jQuery ...........................................................................................485Selektory i filtry ............................................................................................485Zdarzenia ......................................................................................................487Efekty w postaci animacji .............................................................................488Metody ..........................................................................................................488Przechodzenie po elementach HTML ...........................................................489
JQuery UI ............................................................................................................... 490JQuery Mobile ........................................................................................................ 490
Kup książkę Poleć książkę
14 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
AJAX ..................................................................................................................... 491JSON .............................................................................................................492XMLHttpRequest ..........................................................................................493AJAX w jQuery ............................................................................................494
Dodatek E Bazy nierelacyjne ......................................................................... 497MongoDB ..................................................................................................................... 498RavenDB ...................................................................................................................... 498
Dodatek F Podstawy pozycjonowania w Google ............................................. 499Metatagi ........................................................................................................................ 499
Znacznik <title> ..................................................................................................... 500Opis strony ............................................................................................................. 500S owa kluczowe ..................................................................................................... 500Warto ci noindex i nofollow .................................................................................. 500
Znaczniki HTML .......................................................................................................... 500Linkowanie ................................................................................................................... 501Zaplecze, katalogi stron i precle ................................................................................... 502
Skrypty katalogów .................................................................................................. 502Skrypty blogowe .................................................................................................... 503
Schematy linkowania .................................................................................................... 503Schemat ko a .......................................................................................................... 503Schemat piramidy ................................................................................................... 504Gwiazda ................................................................................................................. 504Schematy mieszane ................................................................................................ 505
Linkowanie wewn trzne ............................................................................................... 505„D ugi ogon” ................................................................................................................ 505Przyjazne adresy URL — Friendly URL ...................................................................... 506Pliki zwi zane z pozycjonowaniem .............................................................................. 506
robots.txt ................................................................................................................ 506sitemap.xml ............................................................................................................ 507.htaccess ................................................................................................................. 508
Filtry i kary ................................................................................................................... 509Ban ......................................................................................................................... 509Sandbox .................................................................................................................. 509
Zmiany algorytmu Google ............................................................................................ 510Panda ...................................................................................................................... 510Pingwin .................................................................................................................. 510EDM ....................................................................................................................... 511
Narz dzia zwi zane z pozycjonowaniem ..................................................................... 511Google Analytics i Google Webmasters Tools ....................................................... 511Narz dzia do pracy z tekstem ................................................................................. 511Systemy wymiany linków ...................................................................................... 512Pó automaty, „dodawarki” i automaty do postowania ............................................ 512Inne narz dzia ........................................................................................................ 513
Skorowidz .................................................................................... 515
Kup książkę Poleć książkę
Rozdzia 4.
Entity Framework 6Entity Framework (EF) jest odpowiedzialny za kontakt aplikacji z baz danych. Domy lneoperacje wykonywane na bazie danych to operacje CRUD (ang. Create, Read, Update,Delete). Dzi ki EF i Scaffolding (automatyczny generator kodu) mo na automatyczniewygenerowa kod odpowiedzialny za operacje CRUD dla ka dej tabeli z bazy danych.
Podej cie do pracy z modelem danychEF udost pnia trzy podej cia do pracy z warstw dost pu do danych DAL (ang. DataAccess Layer):
Model First — tworzy si diagram ERD (ang. Entity-Relationship Diagram)w Visual Studio za pomoc Model Designera i na podstawie diagramugenerowana jest baza danych (kod SQL) oraz wszystkie klasy z modelemdanych, po jednej dla ka dej tabeli.
Code First — tworzy si samodzielnie klasy (odpowiadaj ce tabelom w baziedanych) i na podstawie klas generowana jest baza danych (kod SQL); dodatkowo,aby uaktualni baz danych po zmianach wprowadzonych w plikach z klasami,wykorzystuje si migracje (aktualizacje bazy danych).
Database First — klasy i diagram ERD s generowane lub uaktualnianena podstawie istniej cej bazy danych.
Porównanie ró nych podejModel First pozwala na szybkie utworzenie bazy danych poprzez wstawianie elementóww edytorze graficznym, ale nie daje takiej kontroli nad kodem jak Code First. W przy-padku korzystania z Code First trzeba r cznie tworzy pliki z klasami, co powoduje,e mo na si atwo pomyli . Database First z kolei jest wykorzystywany w przypadku,
gdy tworzy si aplikacj na podstawie ju istniej cej bazy danych. Dodatkowo powybraniu bazy danych, na podstawie której chce si utworzy projekt, wybiera si ,czy w dalszej cz ci zostanie u yte podej cie Code First, czy Model First. W zale -no ci od wyboru utworzone zostan klasy (Code First) lub diagram (Model First).
Kup książkę Poleć książkę
158 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
Najwi ksz kontrol nad kodem daje podej cie Code First. Dla pocz tkuj cych podej cieModel First b dzie bardziej intuicyjne, poniewa baza jest prezentowana w formiediagramu ERD.
Model dla podej cia Model FirstModel danych dla podej cia Model First jest zawarty w pliku .edmx. Domy lnie modeljest prezentowany jako diagram ERD w Entity Designerze (narz dzie w Visual Studiodo tworzenia diagramu ERD).
Na pe ny model danych w podej ciu Model First sk adaj si trzy cz ci:
model konceptualny (ang. Conceptual Schema Definition Language),
model ród a danych (ang. Storage Schema Definition Language),
cz odwzorowuj ca (ang. Mapping Specification Language).
Wszystkie cz ci znajduj si w jednym pliku .edmx. Jest to plik XML. Na podstawiepliku .edmx generowany jest schemat bazy danych — diagram ERD.
Przyk adowy schemat bazy danych utworzony w Entity Designerze prezentujerysunek 4.1.
Model dla podej cia Code FirstPrzyk adowa klasa z modelem dla podej cia Code First znajduje si na listingu 4.1.Jest to klasa POCO (ang. plain-old CLR objects), czyli klasa, która odwzorowuje strukturtabeli z bazy danych na klas w podej ciu obiektowym.
Listing 4.1. Przyk adowa klasa POCO
public partial class Kurs{ public Kurs() { this.KursUser = new HashSet<KursUser>(); } public int Id { get; set; } public string Skad { get; set; } public string Dokad { get; set; } public System.DateTime DataWyjazdu { get; set; } public System.DateTime DataDodania { get; set; }
public virtual ICollection<KursUser> KursUser { get; set; }}
Kup książkę Poleć książkę
Rozdzia 4. Entity Framework 6 159
Rysunek 4.1. Diagram ERD z Entity Designera
Nowo ci wprowadzanew kolejnych wersjach EF
Nowo ci wprowadzone w EF 5Najwa niejsze nowo ci wprowadzone w EF 5 to:
mo liwo tworzenia wielu diagramów dla jednego modelu (Model First);
wsparcie dla typu wyliczeniowego enum w Code First i Model First;
wsparcie dla typów danych przestrzennych (ang. spatial data types) w CodeFirst i Model First;
Kup książkę Poleć książkę
160 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
TVF (ang. Table-Valued Functions) w Model First — podobne do procedursk adowanych, z jedn ma ró nic — dane z TVF mog by u ytew zapytaniach LINQ, natomiast dane z procedury sk adowanej nie.
Nowo ci wprowadzone w EF 6Najwa niejsze nowo ci wprowadzone w EF 6 to:
w asne konwencje w Code First;
poprawiona wydajno dla du ych modeli w podej ciu Code First;
migracje dla wielu kontekstów do jednej bazy danych;
automatyczne ponawianie transakcji (ang. Connection Resiliency), w przypadkugdy zako czy si ona niepowodzeniem;
tworzenie nowych kontekstów dla otwartego po czenia;
poprawione wsparcie dla transakcji;
wstrzykiwanie implementacji w czasie dzia ania programu (ang. DependencyResolution) oraz wsparcie dla wzorców Service Locator i IoC;
atwe przechwytywanie logów (ang. Interception/SQL Logging), zapyta SQLgenerowanych przez EF.
Relacyjne bazy danych i EF
Krótki opis baz relacyjnychBazy relacyjne powsta y w czasach, gdy przestrze dyskowa by a do du ym ograni-czeniem dla programów. Dyski mia y pojemno ci liczone w megabajtach, a nie — jakobecnie — w terabajtach. Aby oszcz dzi miejsce na dysku, dane musia y by przecho-wywane w oszcz dny sposób bez duplikacji wpisów. Relacyjne bazy danych sk adajsi z tabel, pomi dzy którymi zachodz relacje. Ka da tabela sk ada si z wierszyi kolumn. Na ka dy wiersz sk adaj si jednakowo u o one kolumny wype nione warto-ciami, które z kolei w ka dym wierszu mog by inne. Ka dy wiersz ma swój unikalny
numer zwany kluczem podstawowym PK (ang. Primary Key), po którym mo na roz-pozna konkretny wiersz danych (np. konkretnego pracownika z tabeli Pracownik).Aby powi za wiersz z jednej tabeli z wierszem znajduj cym si w innej tabeli, nale yumie ci w niej klucz obcy FK (ang. Foreign Key). Jest to ta sama warto , któraw pierwszej tabeli jest kluczem podstawowym (PK). Druga tabela mo e np. zawieramiejsce zamieszkania pracownika, które mo e by wspólne dla kilku pracowników.Dzi ki takiemu rozwi zaniu zostanie utworzona relacja pomi dzy tabelami. Istniejekilka rodzajów relacji.
Kup książkę Poleć książkę
Rozdzia 4. Entity Framework 6 161
Relacja „jeden do wielu”Relacja „jeden do wielu” polega na tym, e do jednego wiersza w tabeli mo e by przypi-sanych kilka wierszy z innej tabeli. Przyk adowo jeden klient mo e mie kilka zamó-wie . Klucz obcy znajduje si w tabeli z zamówieniem i ma tak sam warto jakklucz podstawowy z tabeli klienta. Po kluczu obcym mo na odczyta wi cej danychna temat klienta, który z o y zamówienie, dzi ki czemu nie trzeba do ka dego zamó-wienia zapisywa tych samych danych pojedynczego klienta. Taka operacja odczytudodatkowych danych z drugiej tabeli nazywana jest „joinem”. Na listingu 4.2 przedsta-wiono przyk adow relacj „jeden do wielu” dla podej cia Code First, a na rysunku 4.2zaprezentowano t sam relacj w podej ciu Model First.
Listing 4.2. Przyk ad relacji „jeden do wielu” w podej ciu Code First
public class Ogloszenie{ public Ogloszenie() { } public int Id { get; set; } public string Tresc { get; set; } public System.DateTime DataDodania { get; set; }
public string UzytkownikId { get; set; }
public Uzytkownik Uzytkownik { get; set; }}
public class Uzytkownik{ public Uzytkownik() { this.Ogloszenie = new HashSet<Ogloszenie>(); } public int Id { get; set; } public string Imie { get; set; } public string Nazwisko { get; set; }
public virtual ICollection<Ogloszenie> Ogloszenie { get; private set; }}
Relacja „jeden do jednego”Relacja „jeden do jednego” wyst puje, gdy jeden wiersz z pierwszej tabeli jest powi za-ny z tylko jednym rekordem z drugiej tabeli. Taka relacja mo e mie sens np. wtedy,gdy chcesz przechowywa dodatkowe informacje na temat u ytkownika, jednak niechcesz, aby by y one w tej samej tabeli, lub gdy u ytkownik mo e pe ni tylko jednfunkcj w firmie. Na listingu 4.3 przedstawiono przyk adow relacj „jeden do jednego”dla podej cia Code First, a na rysunku 4.3 zaprezentowano t sam relacj w podej-ciu Model First.
Kup książkę Poleć książkę
162 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
Rysunek 4.2.Przyk ad relacji„jeden do wielu”w podej ciuModel First
Listing 4.3. Przyk ad relacji „jeden do jednego” w podej ciu Code First
public class Uzytkownik{ public Uzytkownik() { } public int Id { get; set; } public string Imie { get; set; } public string Nazwisko { get; set; }
[Required] public virtual Adres Adres { get; private set; }}
public class Adres{ public Adres() { } [Key, ForeignKey(„Uzytkownik”)] public int Id { get; set; } public string Miasto { get; set; }
public virtual Uzytkownik Uzytkownik { get; set; }}
Rysunek 4.3.Przyk ad relacji„jeden do jednego”w podej ciu ModelFirst
Relacja „wiele do wielu”Relacja „wiele do wielu” wyst puje, gdy jeden wiersz z pierwszej tabeli mo e bypowi zany z wieloma wierszami z drugiej tabeli, a jeden wiersz z drugiej tabeli mo eby powi zany z kilkoma wierszami z pierwszej tabeli. Przyk adowo pracownik mo e
Kup książkę Poleć książkę
Rozdzia 4. Entity Framework 6 163
mie przypisanych wiele adresów, a jeden adres mo e by przypisany do wielu pracowni-ków. Oczywi cie nie chodzi tu o to, e w tabeli s zapisane te same dane, tylko o to,e klucz obcy pokazuje na ten sam wiersz w tabeli. Relacje „wiele do wielu” rozk ada
si na dwie relacje „jeden do wielu” i dodaje trzeci tabel pomi dzy tabelami, któremaj relacj „wiele do wielu”. Proces taki zabezpiecza przed redundancj danych(powtarzaniem tych samych danych). Nowa, rodkowa tabela ma dwa klucze obce:jeden do tabeli pierwszej, a drugi do drugiej. W podej ciu obiektowym w EF mo liwejest tworzenie relacji „wiele do wielu” bez dodatkowej klasy dla po redniej tabeli. EFautomatycznie przet umaczy takie powi zanie i w bazie danych pojawi si trzecia tabela.Tabela po rednia b dzie niewidoczna z punktu widzenia kodu, jednak b dzie si znaj-dowa a w bazie danych. Na listingach przedstawiono przyk adow relacj „wiele dowielu” dla podej cia Code First bez dodatkowej tabeli (listing 4.4) i z dodatkow tabel(listing 4.5), a na rysunkach zaprezentowano t sam relacj w podej ciu Model Firstbez dodatkowej tabeli (rysunek 4.4) i z dodatkow tabel (rysunek 4.5).
Listing 4.4. Przyk ad relacji „wiele do wielu” w podej ciu Code First bez dodatkowej tabeli
public class Uzytkownik{ public Uzytkownik() { this.Wiadomosc = new HashSet<Wiadomosc>(); } public int Id { get; set; } public string Imie { get; set; }
public string Nazwisko { get; set; }
public virtual ICollection<Wiadomosc> Wiadomosc { get; private set; }}
public class Wiadomosc{ public Wiadomosc () { this.Uzytkownik = new HashSet<Uzytkownik>(); } public int Id { get; set; } public string Tresc { get; set; }
public virtual ICollection<Uzytkownik> Uzytkownik { get; private set; }}
Listing 4.5. Przyk ad relacji „wiele do wielu” w podej ciu Code First z dodatkow tabel
public class Uzytkownik{ public Uzytkownik() { this.Wiadomosc = new HashSet<Wiadomosc>(); } public int Id { get; set; } public string Imie { get; set; }
Kup książkę Poleć książkę
164 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
public string Nazwisko { get; set; } public virtual ICollection<Uzytkownik_Wiadomosc> Uzytkownik_Wiadomosc { get; private set; }}
public class Uzytkownik_Wiadomosc{ public int Id { get; set; } public string UzytkownikId { get; set; } public int WiadomoscId { get; set; } public virtual Uzytkownik Uzytkownik { get; set; } public virtual Wiadomosc Wiadomosc { get; set; }}
public class Wiadomosc{ public Wiadomosc() { this.Uzytkownik_Wiadomosc = new HashSet<Uzytkownik_Wiadomosc>(); } public int Id { get; set; } public string Tresc { get; set; }
public virtual ICollection<Uzytkownik_Wiadomosc> Uzytkownik_Wiadomosc { get; private set; }}
Rysunek 4.4. Przyk ad relacji „wiele do wielu” w podej ciu Model First bez dodatkowej tabeli
Rysunek 4.5. Przyk ad relacji „wiele do wielu” w podej ciu Model First z dodatkow tabel
Kup książkę Poleć książkę
Rozdzia 4. Entity Framework 6 165
Relacje opcjonalneRelacje opcjonalne oznaczaj , e dana relacja mo e, ale nie musi wyst pi . Du e zna-czenie ma koniec, na którym znajduje si relacja opcjonalna. Przyk adowo klient mo e,ale nie musi posiada dodatkowych danych, dlatego relacja opcjonalna musi by postronie tabeli klienta, poniewa dane dodatkowe zawsze b d powi zane z klientem.Nie mo e by danych dodatkowych bez klienta, natomiast klient mo e by bez danychdodatkowych. Taka relacja to relacja 0..1 do 1.
Podobnie wygl da sytuacja z relacj 0..1 do wielu. W przypadku takiej relacji mo eistnie wiele og osze , ale og oszenie niekoniecznie musi by powi zane z u ytkow-nikiem.
Obiekty DbContext i DbSet
DbContext i DbSetDbContext to obiekt odpowiedzialny za prac z danymi. DbContext zajmuje si odczytemdanych z bazy danych, ledzeniem stanu obiektów, zarz dzaniem i powi zaniamipomi dzy danymi w pami ci, t umaczeniem danych relacyjnych na obiektowe i zapisemdanych do bazy. W klasie DbContext znajduj si w a ciwo ci DbSet, które reprezentujkolekcje okre lonych klas (tabel) znajduj cych si w obiekcie kontekstu (listing 4.6).
Listing 4.6. Przyk adowa klasa DbContext
public class ProduktContext : DbContext{ public DbSet<Kategoria> Kategorie { get; set; } public DbSet<Produkt> Produkty { get; set; }}
Obiekt kontekstu jest przechowywany w pami ci do czasu, a zostanie usuni ty przezGarbage Collector lub zostanie wywo ana metoda Dispose() na jego instancji. W apli-kacji internetowej obiekt DbContext powinien by tworzony dla ka dego dania HTTP.Czas ycia takiego obiektu powinien by jak najkrótszy, poniewa nie zostanie onponownie u yty.
Metody Attach i DetachDane pobierane z bazy s automatycznie przypisywane do kontekstu. Wyj tkiem s tutajzapytania AsNoTracking(), których wynik nie jest zapisywany do kontekstu, wi c danenie s ledzone (mo liwe jest przy czenie takich danych za pomoc metod). PoniewaDbContext przechowuje dane w postaci obiektowej, mo liwe jest od czenie obiektu odkontekstu lub przy czenie obiektu pochodz cego z innego ród a, innego kontekstu b d
Kup książkę Poleć książkę
166 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
obiektu wcze niej od czonego od kontekstu (równie z innej instancji kontekstu).Obiekty od czone od kontekstu nie maj ledzonego stanu przez DbContext i nie mogzosta zapisane do bazy danych.
Istniej metody pozwalaj ce na przy czenie obiektu do kontekstu:
AddObject() dodaje i ustawia stan obiektu na Added (dodany). Dla obiektówze stanem Added klucz podstawowy (PK) nie musi mie unikalnej warto ci,poniewa podczas zapisu i tak zostanie wygenerowany przez baz danych.
Attach() dodaje do kontekstu i ustawia stan na Unchanged (niezmieniony).Warto PK musi by unikalna, w przeciwnym wypadku EF wywo a wyj tek.
AttachTo() dzia a identycznie jak Attach(), jednak zamiast wywo ywaj dla obiektu kontekstu, to nazw kontekstu podaje si jako parametr.
Za pomoc metody Detach() mo na od czy obiekt od kontekstu, jednak niesie to zasob pewne konsekwencje. Je li obiekt posiada relacje do innych obiektów, to powi zaneobiekty nie zostan usuni te z kontekstu. Stan obiektu nie jest ledzony, od czenie niewp ywa na dane w bazie danych, a je li istnieje, nie zostaje wywo ane kaskadowe usu-wanie w trakcie wykonywania operacji Detach():
context.Detach(zamowienie.Szczegoly.First());
Relacje poprzez klucz FKa relacje niezale ne (obiektowe)
Relacje „jeden do jednego” zawsze s relacjami poprzez klucz (FK), natomiast relacje„wiele do wielu” zawsze s relacjami niezale nymi (ang. Independent). Dla relacji „jedendo wielu” mo na zastosowa relacj FK lub niezale n .
Relacje poprzez klucz obcy — FK AssociationRelacja FK (ang. FK Association) polega na dodaniu klucza obcego do klasy odwzo-rowuj cej tabele. Relacje pomi dzy klasami polegaj na kluczu obcym, tak samo jakw bazie danych (listing 4.7). Takie rozwi zanie nie jest rozwi zaniem obiektowym, leczrelacyjnym. Natomiast klasy s cz ci programowania obiektowego. Takie rozwi zaniema swoje plusy i minusy.
Plusy relacji FK:
znaj c warto klucza, mo na doda dane do s siedniej tabeli, nie trzeba posiadawczytanego ca ego obiektu z bazy danych;
podej cie bardziej intuicyjne, identyczne jak w bazie danych i kodzie SQL.
Kup książkę Poleć książkę
Rozdzia 4. Entity Framework 6 167
Minusy relacji FK:
podej cie relacyjne, a nie obiektowe, w rodowisku obiektowym;
posiadanie dwóch relacji (zarówno FK, jak i relacji niezale nej) mo epowodowa problem z synchronizacj pomi dzy tymi dwoma rodzajami relacji.
Listing 4.7. Przyk ad relacji FK w EF
public class Ogloszenie{ public Ogloszenie() { } public int Id { get; set; } public int UzytkownikId { get; set; } public Uzytkownik Uzytkownik { get; set; }}
public class Uzytkownik{ public Uzytkownik() { this.Ogloszenie = new HashSet<Ogloszenie>(); } public int Id { get; set; } public string Imie { get; set; } public string Nazwisko { get; set; }
public virtual ICollection<Ogloszenie> Ogloszenie { get; private set; }}
Relacje niezale ne — Independent AssociationRelacja niezale na (ang. Independent Association) polega na tym, e nie dodaje si doklasy kluczy obcych, tylko obiekt klasy, z któr wyst puje relacja (listing 4.8). Kon-sekwencj takiego podej cia jest konieczno posiadania ca ego obiektu w pami ci —bez tego EF nie móg by zamodelowa relacji, poniewa nie opiera si ona na FK.
Plusy relacji niezale nej:
istnieje dost p do wszystkich danych z s siedniej tabeli, a nie tylko do klucza,poniewa w pami ci znajduje si ca y obiekt;
obiektowe podej cie.
Minusy relacji niezale nej:
skomplikowane t umaczenie relacji pomi dzy obiektami na relacje w bazie danych;
mniej intuicyjne ni relacje FK;
je li tworzy si relacje, potrzebne s obiekty dla obu ko ców relacji(w FK wystarczy o poda warto klucza obcego);
Kup książkę Poleć książkę
168 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
nie ma stanu modified — za ka dym razem relacja jest usuwana i dodawanajest nowa;
mniej naturalne z punktu widzenia baz danych i j zyka SQL, trudniejszedo wychwycenia b dy.
Listing 4.8. Przyk ad relacji niezale nej w EF
public class Ogloszenie{ public Ogloszenie() { } public int Id { get; set; }
public Uzytkownik Uzytkownik { get; set; }}
public class Uzytkownik{ public Uzytkownik() { this.Ogloszenie = new HashSet<Ogloszenie>(); } public int Id { get; set; } public string Imie { get; set; } public string Nazwisko { get; set; } public virtual ICollection<Ogloszenie> Ogloszenie { get; private set; }}
Odpytywanie bazy danychza pomoc EF i LINQ
Wczytywanie zach anne — Eager LoadingWczytywanie zach anne (ang. Eager Loading) to proces, w którym zapytanie o jedentyp tabeli pobiera równie dane z tabeli, które s z ni powi zane (posiadaj relacje).U ytkownik posiada wiele og osze . Je li pobiera si u ytkownika, to pobierane s rów-nie jego og oszenia. Aby u y Eager Loading, gdy w czone jest Lazy Loading, nale ywywo a metod Include() w zapytaniu LINQ (listing 4.9).
Listing 4.9. Przyk ad zapytania Eager Loading
using (var context = new AppContext()){ var uzytkownicy = context.Uzytkownik .Include(b => b.Ogloszenia) .ToList();}
Kup książkę Poleć książkę
Rozdzia 4. Entity Framework 6 169
Wczytywanie leniwe — Lazy LoadingWczytywanie leniwe (ang. Lazy Loading) pozwala na opó niony odczyt danych. Nie makonieczno ci pobierania danych og osze , je li chce si pobra tylko dane u ytkownika,pomimo e w klasie Uzytkownik znajduje si kolekcja og osze . Gdy u ywa si LazyLoading, podczas pobierania danych do klasy u ytkownika nie s adowane jego og o-szenia (listingi 4.10 i 4.11). Lazy Loading wymaga oznaczenia w a ciwo ci relacji jakowirtualnej (virtual). Aby by o mo liwe leniwe adowanie, tworzone s dynamicznepuste obiekty proxy, które nadpisuj pola wirtualne w a ciwo ci. Je li u ytkownik pró-buje si odwo a do obiektu proxy po raz pierwszy (chce wy wietli równie infor-macje o og oszeniach u ytkownika), to tworzona jest instancja prawdziwego obiektu(kolekcji og osze ) w miejsce pustego obiektu proxy.
Listing 4.10. Przyk ad klasy Lazy Loading
public class Uzytkownik{ public Uzytkownik() { this.Ogloszenia = new HashSet<Ogloszenie>(); }
public string Imie { get; set; } public string Nazwisko { get; set; }
public virtual ICollection<Ogloszenie> Ogloszenia { get; private set; }}
Listing 4.11. Przyk ad zapytania Lazy Loading
using (var context = new AppContext()){ var uzytkownicy = context.Uzytkownik.Take(10);}
Podczas korzystania z Web API wymagana jest serializacja danych (zapis w formacieJSON lub XML). Aby serializacja by a mo liwa, konieczne jest wy czenie Lazy Loading,poniewa powoduje to adowanie du ej ilo ci niepotrzebnych danych, a nawet zap -tlenie. Lazy Loading mo na wy czy poprzez usuni cie modyfikatora virtual przedw a ciwo ci relacji lub globalnie w klasie z kontekstem, co zosta o zaprezentowanew poni szym kodzie:
public AppContext(){ this.Configuration.LazyLoadingEnabled = false;}
Zalety Lazy Loading:
szybsze adowanie aplikacji,
mniejsze zu ycie pami ci poprzez wczytywanie danych na yczenie,
Kup książkę Poleć książkę
170 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
zmniejszenie liczby zapyta do bazy danych.
Wady Lazy Loading:
konieczno sprawdzania, czy Lazy Loading jest w czone, co skutkujenieznacznie mniejsz wydajno ci , gdy dane i tak musz zosta wczytane.
Jawne adowanie — Explicit LoadingJe li chcemy, aby przy wy czonym trybie Lazy Loading zapytanie zachowywa o sitak jak w trybie Lazy Loading, trzeba skorzysta z zapytania Explicit Loading. Abywykona Explicit Loading, nale y wywo a metod Load() na powi zanej relacj tabeli(listing 4.12).
Listing 4.12. Przyk ad Explicit Loading
using (var context = new AppContext()){ var uzytkownik = context.Uzytkownik.Find(2); context.Entry(uzytkownik).Collection(p => p.Ogloszenia).Load();}
Problem N+1Problem N+1 wyst puje, gdy nie korzysta si z Lazy Loading i chce si pobra w jed-nym zapytaniu do bazy list obiektów, które posiadaj relacje z innymi obiektami (lis-ting 4.13). Nast pnie dla ka dego pobranego obiektu jest wykonywane osobne zapytaniepobieraj ce dodatkowe dane z tabel, które s powi zane (posiadaj relacje). Problemwyst puje w zapytaniach bez wykorzystania operacji join. Przyk adowo ka dy klient(wiersz w tabeli klient) ma przypisany jeden adres (wiersz z tabeli adres). Przy pobiera-niu listy klientów, gdy ka da klasa klienta ma pole adres, wywo ane zostaje zapytaniezwracaj ce list klientów (bez adresów), a potem automatycznie wywo ywane s dodat-kowo osobne zapytania o adres. Ka de zapytanie jest wywo ywane osobno, a wi c b dzietyle zapyta do bazy danych, ile zostanie zwróconych klientów. W Lazy Loading Pro-blem N+1 wyst pi dopiero wtedy, gdy zajdzie potrzeba pobrania adresów. Je li tabelaposiada index, dane zostan bardzo szybko zwrócone — i takie podej cie jest prawi-d owe (szybsze ni operacja join), jednak gdy danych jest du o i trzeba wykona bardzodu o pojedynczych zapyta do bazy, operacja join powinna by szybsza (listing 4.14).Najlepszym wyj ciem jest napisanie dwóch zapyta i sprawdzenie, które jest szybszew danym przypadku i w jakim stopniu obci a baz danych.
Listing 4.13. Przyk ad kodu prezentuj cego Problem N+1
using (var context = new AppContext()){ foreach (var uzytkownik in context.Uzytkownik) { foreach (var ogloszenie in uzytkownik.Ogloszenia) { Console.WriteLine("{0}: {1}", uzytkownik.Imie, ogloszenie.Tytul);
Kup książkę Poleć książkę
Rozdzia 4. Entity Framework 6 171
} }}
Listing 4.14. Przyk ad kodu korzystaj cego z operacji join (metoda Include) bez Problem N+1
using (var context = new AppContext()){ foreach (var uzytkownik in context.Uzytkownik.Include("Ogloszenia")) { foreach (var ogloszenie in uzytkownik.Ogloszenia) { Console.WriteLine("{0}: {1}", uzytkownik.Imie, ogloszenie.Tytul); } }}
Metoda AsNoTracking()Metoda rozszerzaj ca AsNoTracking() zwraca z zapytania dane, które nie b d ledzoneprzez EF ani nie b d przechowywane w pami ci obiektu DbContext. ZastosowanieAsNoTracking() skutkuje oko o dwukrotnie wi ksz wydajno ci przy odczycie. Je lidane mog lub maj zosta zmodyfikowane, nie powinno si korzysta z tej metody.EF b dzie wówczas ledzi zmiany w obiekcie, co umo liwi edycj lub zapis danych dobazy (listing 4.15).
Listing 4.15. Przyk adowy kod wykorzystuj cy metod AsNoTracking()
using (var context = new WebAppContext()){ var dane = context.Tabela .Where(d => d.Nazwa.Contains(".NET")) .AsNoTracking() .ToList();}
Odroczone i natychmiastowe wykonanieNatychmiastowe (ang. Immediate) wykonanie zapytania pobiera ca o danych od razupodczas wykonywania zapytania. Odroczone (ang. Deferred) wykonanie zapytaniakorzysta z iteratorów (tabela 4.1) i yield return, a wi c musi zwraca typ danych, którydziedziczy po IEnumerable, i zwraca dane pojedynczo w momencie, kiedy s potrzebne.Domy lnie u ywane jest odroczone wykonanie. Aby wywo a natychmiastowe wyko-nanie, nale y u y jednej z nast puj cych metod: ToList(), ToDictionary() lub ToAr-ray(). Wszystkie zapytania zwracaj ce pojedyncz warto s wykonywane natychmia-stowo, np. Averange, Count, First lub Sum, poniewa nie ma mo liwo ci u yciaopó nionego wykonania, je li jest tylko jeden element w kolekcji.
Kup książkę Poleć książkę
172 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
Tabela 4.1. Lista operatorów, które posiadaj zaimplementowane iteratory
Metoda Iterator
Cast CastIterator
Concat ConcatIterator
DefaultIfEmpty DefaultIfEmptyIterator
Distinct DistinctIterator
Except ExceptIterator
GroupJoin GroupJoinIterator
Intersect IntersectIterator
Join JoinIterator
OfType OfTypeIterator
Range RangeIterator
Repeat RepeatIterator
Reverse ReverseIterator
Select SelectIterator
SelectMany SelectManyIterator
Skip SkipIterator
SkipWhile SkipWhileIterator
Take TakeIterator
TakeWhile TakeWhileIterator
Union UnionIterator
Where WhereIterator
Zip ZipIterator
Entity SQLEntity SQL to j zyk zapyta bazuj cy na SQL (alternatywa dla LINQ to Entities). Pozwalana pisanie zapyta w j zyku SQL, jednak w tre ci zapytania zamiast nazw tabel podajesi nazwy klas z aplikacji. Entity SQL powinien by u ywany tylko w momencie, gdyzapytanie pisane za pomoc LINQ jest zbyt skomplikowane. Zapytania Entity SQL nie skompilowane, lecz konstruowane s w czasie dzia ania programu. Zapytania LINQ skompilowane i typowane (zwi ksza si bezpiecze stwo i szybko ), dlatego powinnyby u ywane, je li tylko jest to mo liwe. Aby wykona zapytanie Entity SQL, nale yuzyska ObjectContext z obiektu DbContext i skorzysta z generycznej metody Object
Query<T> (listing 4.16)1.
Listing 4.16. Przyk ad zapytania Entity SQL
using(ApplicationDbContext context = new ApplicationDbContext()){ var adapter = (IObjectContextAdapter)context; var objectContext = adapter.ObjectContext;
1 http://msdn.microsoft.com/en-us/library/bb399554.aspx
Kup książkę Poleć książkę
Rozdzia 4. Entity Framework 6 173
string esqlQuery = @"SELECT VALUE Ogloszenie FROM Models.Ogloszenia as Ogloszenie WHERE Ogloszenie.Id > @parametrId";
ObjectQuery<Ogloszenie> query = new ObjectQuery<Ogloszenie>(esqlQuery, objectContext, MergeOption.NoTracking);
query.Parameters.Add(new ObjectParameter("parametrId", 1));
return query;}
Bezpo rednie zapytania SQL do bazy(Direct/RAW SQL) i procedury sk adowane w EF
Zapytania Direct/RAW SQL powinny by stosowane tylko wtedy, gdy nie ma mo liwo ciskorzystania z zapyta LINQ to Entities lub Entity SQL. W zapytaniu SQL podaje sinazwy tabel w bazie danych, a nie nazwy klas, jak to by o w Entity SQL. W Entity SQLoperuje si na typach pochodz cych z aplikacji, co wp ywa na bezpiecze stwo, ponie-wa typy danych s znane i walidowane. Dla zapyta RAW SQL, czyli sk adaj cychsi z czystego kodu SQL, wyst puje niebezpiecze stwo ataku SQL Injection. Abypobra dane za pomoc j zyka SQL, nale y u y metody SqlQuery(), a w celu wys aniazapytania do bazy niezwracaj cego adnych warto ci korzysta si z SqlCommand().
Przyk ad zapytania zwracaj cego typ klasy POCO:using (var context = new AppContext()){ var blogs = context.Ogloszenia.SqlQuery("SELECT * FROM dbo.Ogloszenia").ToList();}
Przyk ad wywo ania procedury sk adowanej z parametrem:using (var context = new AppContext()){ var ogloszenieId = 1; var blogs = context.Ogloszenia.SqlQuery("dbo.GetOgloszenieById @p0", ogloszenieId).Single();}
Przyk ad zapytania zwracaj cego typ, który nie jest klas POCO:using (var context = new AppContext()){ var tytuly = context.Database.SqlQuery<string>("SELECT Tytul FROM dbo.Ogloszenia").ToList();}
Kup książkę Poleć książkę
174 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
Przyk ad zapytania SQL niezwracaj cego warto ci:using (var context = new AppContext()){ context.Database .SqlCommand("UPDATE dbo.Ogloszenia SET Tytul = 'Jakis tytul' WHERE Id = 1");}
Transakcje w EFTransakcja to traktowanie kilku operacji na bazie danych jak jednej. Je li cho jednozapytanie nie zostanie wykonane, to reszta zapyta tak e nie mo e zosta wykonana.Je li b d wyst pi w ostatniej operacji, to wcze niej wykonane operacje nale y wycofa ,czyli przywróci dane do stanu, w jakim znajdowa y si przed rozpocz ciem wyko-nywania transakcji. Transakcje powinny by wykonywane, je li kolejne operacje zaleod wcze niejszych operacji lub gdy nie chce si , aby rezultat pojedynczej operacji (tylkocz ci z ca ej transakcji) by widoczny dla innych u ytkowników bazy danych. W przy-padku transakcji wszystkie operacje zostan wykonane jak pojedyncza operacja. Trans-akcja mo e dzia a na kilku ród ach danych — dopiero gdy wszystkie operacje zako czsi powodzeniem, transakcja b dzie zaakceptowana i dane zostan zapisane. Aby sko-rzysta z transakcji, nale y utworzy nowy obiekt TransactionScope przy u yciu blokuusing (listing 4.17), nast pnie utworzy obiekty kontekstu i wykona operacje powi zanez transakcj . Na koniec wywo uje si metod Complete(), która oznacza, e wszystkieoperacje si powiod y i ca a transakcja zako czy a si sukcesem. Je li którakolwiekoperacja si nie powiedzie, metoda Complete() nie zostanie wywo ana, co b dzieoznacza , e trzeba przywróci dane do stanu oryginalnego (odwróci ju wykonaneoperacje)2.
Listing 4.17. Przyk ad u ycia TransactionScope
using (var scope = new TransactionScope(TransactionScopeOption.Required)){ using (var conn = new SqlConnection("...")) { conn.Open();
var sqlCommand = new SqlCommand(); sqlCommand.Connection = conn; sqlCommand.CommandText = @"UPDATE Blogs SET Rating = 5" + " WHERE Name LIKE '%Entity Framework%'";
sqlCommand.ExecuteNonQuery();
using (var context = new AppContext(conn, contextOwnsConnection: false)) { var query = context.Ogloszenia.Where(p => p.Id > 7); foreach (var ogl in query) {
2 http://msdn.microsoft.com/en-us/data/dn456843.aspx
Kup książkę Poleć książkę
Skorowidz.NET Framework Data Provider, 147
Aabstrakcja, 53adnotacje do walidacji, 222ADO.NET, 146adresaty atrybutów, 94Agile, 437AJAX, 491, 495AJAX Long-Polling, 492AJAX Polling, 492akcja
Create, 353, 379Delete, 345, 350, 379Details, 342, 376Edit, 360, 363, 377Index, 311, 317, 327, 385
aktualizacjabibliotek, 281Google
EDM, 511Panda, 510Pingwin, 510
kontrolera, 381, 387pakietów, 279szablonu, 365widoku, 317, 345, 354, 360, 389
aliasy, 82aliasy zewn trzne, 83animacje, 488API
Drag and Drop, 463Web Storage, 461
architekturaaplikacji, 334dwuwarstwowa, 126jednowarstwowa, 126n-warstwowa, 126trójwarstwowa, 126
argumentymetod, 49nazwane, 110
arkusz stylów CSS, 467ASP.NET Identity, 244ASP.NET MVC, 252ASP.NET MVC 1, 185ASP.NET MVC 2, 185ASP.NET MVC 3, 186ASP.NET MVC 4, 186ASP.NET MVC 5, 185, 186ASP.NET MVC 6, 187ASP.NET Web API 2, 251ASP.NET Web Forms, 145ASP.NET Web Pages, 146atak
Cross-Site Request Forgery, 236Cross-Site Scripting, 237CSRF, 357SQL Injection, 236
atrybutBind, 237OutputCache, 232
atrybuty, 93atrybuty Caller Info, 119dla formularza, 459globalne, 456
Attribute Routing, 216, 407autocomplete, 408automaty do postowania, 512automatyczna inicjalizacja w a ciwo ci, 120autoryzacja, 242, 372
dost pu, 369RSA, 448
Azure Service Bus, 144
Bban, 509baza danych, 305, 419
niespójno , 310strategie dziedziczenia, 178
Kup książkę Poleć książkę
516 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
baza dokumentowaMongoDB, 498RavenDB, 498
bazy nierelacyjne, 497bezpiecze stwo, 235, 369biblioteka
Bootstrap, 329JQuery, 484jQuery Unobtrusive, 221PagedList, 382
binding, 357BLOB Storage, 143blok try-catch, 238b d, 310, 348
404, 394dla podstrony, 397podczas edycji, 378w dost pie do danych, 395
Browser Link, 270
CC#, 19C# 2.0, 20C# 3.0, 20C# 4.0, 21C# 5.0, 21C# 6.0, 21cache, 231, 394cachowanie
cz ciowe, 233po stronie klienta, 234po stronie serwera, 231rozproszone, 233w HTML 5, 234
CAPTCHA, 513ceny
licencji SQL Server, 265Windows Server 2012, 268
certyfikatCSR, 450SSL, 449, 450
aktywacja, 450instalacja, 450walidacja, 450
ciasteczka, 243CIL, Common Intermediate Language, 19, 135claimy, 245CLI, Common Language Infrastructure, 135CLR, Common Language Runtime, 135, 137Code First, 157, 158Code First Data annotations, 235Code First Fluent API, 181controller, 128
CORS, 255, 256CRUD, 223CSS, 330CSS 3, 466
nowe selektory, 471nowe w asno ci, 472
CSS 4, 473cykl ycia obiektu, 341czas, 90
DDAL, Data Access Layer, 157data, 90Data Annotations, 181, 235Data Contract, 140Data Member, 140Database First, 157DDD, 132debugowanie, 324
aplikacji, 325, 327metody Seed, 308obiektu db, 327
definiowanie w asnego atrybutu, 256deklaracja zmiennej, 27deklaracje, 24deklaracje inline, 122delegaty, 72destruktor, 64diagram ERD, 159, 413DIP, 431DLR, Dynamic Language Runtime, 137d ugi ogon, Long Tail, 505dobre praktyki, 26dodawanie
domeny, 415dyrektywy using, 285encji, 411kolumny, 413kontrolera, 224, 312kontrolerów, 311modelu, 410nowego projektu, 295nowej klasy, 283referencji, 296w z ów, 478widoków, 311
dokument SOAP, 253DOM, 463, 469
dost pne metody, 477dost pne w a ciwo ci, 479poziomy, 480schemat, 478
domena, 415
Kup książkę Poleć książkę
Skorowidz 517
domena aplikacji, 189domy lny
layout, 313widok, 402
Drag and Drop, 463DRY, Don’t Repeat Yourself, 435drzewa wyra e , 101drzewo, 469DV, Domain Validation, 449dyrektywa using, 81, 121, 285dyrektywy preprocesora, 76dziedziczenie, 54
TPC, 179TPH, 178TPT, 178
EEDA, 133edycja og oszenia, 378edytowane pliki, 425EF 5, 159EF 6, 160elementy HTML 5, 456encje, 411Entity Framework, 153Entity Framework 6, 154, 157Entity SQL, 172EV, Extended Validation, 449eXtreme Programming, 439
FFederated Authentication, 247filtry, 485, 509
akcji, 197wyj tków, 124
folderModels, 294Shared, 201z widokami, 316
formatJSON, 406, 493XML, 406
formularz, 456framework Twitter Bootstrap, 473
GGarbage Collector
podzia na generacje, 66zasada dzia ania, 66
generowaniekontrolerów, 223, 225widoków, 226, 227
geolokalizacja, 465Google Analytics, 511Google Webmasters Tools, 511GRASP, 432
HHandleErroe, 239Harvestery, 513has o, 372hermetyzacja, 54hierarchia drzewa, 469hostowanie aplikacji, 143HTML 5, 453
atrybuty globalne, 456nowe elementy, 456sekcje, 457SSE, 461szablon, 454typy pól formularza, 458WebSockets, 462znaczniki, 454, 459
HTML 5 Application Cache, 234HTML 5 WebStorage, 234HTML DOM, 477HTML helper, 208, 401HTTP, 443
IIdentity Provider, 246identyfikacja, 241IEnumerable, 96IHttpActionResult, 260IIS, Internet Information Services, 263
modu y, 263przetwarzanie da , 264pule aplikacji, 264
implementacja.NET, 138interfejsu, 69, 395klasy repozytorium, 395kontrolera, 396metody POST, 362
indeksatory, 61index, 373inicjalizacja
pól, 64zmiennej, 28
Kup książkę Poleć książkę
518 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
inicjalizatoryobiektów i kolekcji, 100s ownikowe, 121
instalacjabibliotek, 298biblioteki PagedList, 382certyfikatu SSL, 450jQuery, 485kontenera IoC Unity, 338migracji, 300pakietów, 298
instrukcjachecked, 78if, 40, 41switch, 41unchecked, 78
instrukcjeiteracyjne, 43skoku, 45steruj ce, 40
interfejs, 68, 86ICollection<>, 87IDictionary<TKey, TValue>, 86IEnumerable<T>, 87IHttpActionResult, 260IList<>, 87IOgloszenieRepo, 338IQueryable<>, 88
IoC, 397ISAPI, 189ISP, 429iteratory, 97
JJavaScript, 271, 352, 480
JQuery, 484mo liwo ci, 483sk adnia, 481
jawna implementacja interfejsu, 69jawne adowanie, 170j zyk C#, 19JQuery, 352, 484, 495
animacje, 488filtry, 485metody, 488selektory, 485zdarzenia, 487
JQuery Mobile, 491JQuery UI, 490JSON, 406, 493
tablica, 493typy warto ci, 493
JSON Editor, 271JSONP, 255
Kkary, 509kaskadowe usuwanie, 348katalogi stron, 502kategorie, 395KISS, 436klasa, 46
ApplicationUser, 288FilterConfig, 239Kategoria, 286Ogloszenie_Kategoria, 287OgloszenieRepo, 335System.Array, 35System.Object, 63Uzytkownik, 287z kontekstem, 293
klasycz ciowe, 103generyczne, 84
kluczFK, 166obcy, 166szyfruj cy, 447
kolekcje, 37generyczne, 86IEnumerable, 123
komentarze, 23komunikat o b dzie, 222, 351, 380konfiguracja
migracji, 301witryny, 417
konstruktor, 64konstruktory pierwotne, 120kontekst, 410kontener
IoC, 336, 341IoC Unity, 338
konto FTP, 421kontrawariancja, 111, 112kontroler, 194, 223
Web API, 257z widokami, 311
konwencja ponad konfiguracj , 188konwencje, 21
nazewnicze, 25w MVC, 187
konwersjajawna, 58niejawna, 57
konwersje typów, 31
Kup książkę Poleć książkę
Skorowidz 519
Llayout, 367leniwa inicjalizacja, 114licencjonowanie
SQL Server, 265Windows Server, 267
linki, 502linkowanie, 501linkowanie wewn trzne, 505LINQ, 148, 168, 397, 400LINQ to DataSet, 149LINQ to Entities, 149LINQ to Objects, 149LINQ to SQL, 149LINQ to XML, 148lista og osze , 321, 395, 405litera y, 30litera y binarne, 124logowanie, 193, 369, 370, 373logowanie globalne, 240LSP, 428
a cuchy, 36czenie stylów CSS, 210
Mmanifest Agile, 437mapowanie da na akcje, 257mechanizm
refleksji, 93Scaffoldingu, 224
metatagi, 499metoda, 49
Aktualizuj, 365AsNoTracking, 171, 324, 327Attach, 165Create, 358Delete, 348Detach, 165Details, 342Dispose, 313Down, 304Edit, 359Equals, 57GET, 446GetHashCode, 57Index, 388OnException, 238POST, 362, 446POST dla akcji Create, 355
POST dla akcji Delete, 347RegisterBundles, 209SaveChanges, 349Seed, 183, 305ToList, 325, 328Up, 302
metodyanonimowe, 74asynchroniczne, 118, 228, 230cz ciowe, 104generyczne, 84rozszerzaj ce, 102synchroniczne, 228, 230zwrotne, 118
metodyka Scrum, 439Microsoft Azure, 143Microsoft SQL Server 2014, 264Microsoft Visual Studio, 423Microsoft Visual Studio 2013 Ultimate, 268migracja startowa, 302migracje, 183, 300, 309minimalizacja, 209model, 128, 130, 218
aktywny, 129danych, 157First, 157, 158pasywny, 129
modele licencjonowania SQL Server, 265modu y
Elmah, 241IIS, 263
modyfikator private protected, 123MongoDB, 498MoSCoW, 437MVC, Model View Controller, 127, 131, 185
autoryzacja, 242filtry, 198identyfikacja, 241konwencje, 188logowanie b dów, 241metody asynchroniczne, 228metody synchroniczne, 228role, 242struktura projektu, 187uwierzytelnianie, 241wyj tki, 238
MVC Pipeline, 189modu y HTTP, 193cie ka wywo a , 189
uchwyty, 193MVC Scaffolding, 222MVP, Model View Presenter, 129, 131MVVM, Model View ViewModel, 131
Kup książkę Poleć książkę
520 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
Nnarz dzia
do pracy z tekstem, 511ORM, 153
narz dzie NLOG, 240nawiasy klamrowe, 25nazwa domeny, 417nazwy
kwalifikowane, 80niekwalifikowane, 80
NHibernate, 153NHibernate 3, 154nowy projekt, 279
Oobiekt, 48
DataRelation, 147DataRow, 147DataSet, 147DataTable, 147DataView, 147DbContext, 165DbSet, 165HttpApplication, 190
obs ugab dów, 350, 363
da , 191obszary, 217OCP, 428OData, 254odkomentowanie kodu, 370odnajdywanie widoków, 200odpytywanie
bazy danych, 168cykliczne AJAX, 491
odroczone wykonanie, 325og oszenia u ytkownika, 393okno
dodawania domeny, 416dodawania widoku, 207, 400NLOG, 240Output, 326potwierdzania wyboru, 352Properties, 414tworzenia bazy danych, 420tworzenia u ytkownika, 421Watch, 326wyboru
szablonu widoku, 228trybu dzia ania witryny, 419
typu domeny, 417typu widoku, 228
z b dami, 241zarz dzania
baz danych, 420kontami FTP, 421witryn , 418
opakowywanie, 32opcja
Reference script libraries, 227Strongly Typed, 207
OpenAuth, 250OpenId, 249operacja join, 400operacje
CRUD, 223wspó bie ne, 176
Operation Contract, 140operator, 38
??, 40trójargumentowy, 38
opis strony, 500optymalizacja
listy og osze , 322pod k tem pozycjonowania, 331pod k tem SEO, 329SEO, 343
OV, Organization Verification, 449OWIN, 244
PPage Inspector, 269pakiet PagedList.Mvc, 382pakiety, 282, 299panel u ytkownika, 415parametr binding, 237parametry
akcji, 196opcjonalne, 111
p tlado while, 43for, 44foreach, 45while, 43
piaskownica, 509plik
.htaccess, 508_Layout.cshtml, 211BundlesConfig.cs, 209robots.txt, 506sitemap.xml, 507
PLINQ, Parallel LINQ, 151
Kup książkę Poleć książkę
Skorowidz 521
pobieraniedanych, 220, 321, 326
po stronie klienta, 261po stronie serwera, 261
tokena, 246podej cie Model First, 409podpowiedzi sk adni, 319pod wietlanie wierszy, 330podzia wymaga klienta, 437pola, 48polimorfizm, 55po czenie
z baz danych, 422z serwerem, 494
poprawaarchitektury aplikacji, 334wygl du, 329
post p publikacji, 424potwierdzanie to samo ci, 447powi zania pomi dzy tabelami, 412, 413pozycjonowanie, 331, 499
.htaccess, 508Friendly URL, 506linkowanie, 501linkowanie wewn trzne, 505metatagi, 499narz dzia, 511nofollow, 500noindex, 500robots.txt, 506schematy linkowania, 503sitemap.xml, 507s owa kluczowe, 500znaczniki HTML, 500
prefiksy, 215presenter, 130problem N+1, 170procedury sk adowane w EF, 173programowanie
ekstremalne, 439metodologie, 437obiektowe, 53zasady, 427
projektMono, 139Repozytorium, 296
protokóSOAP, 253SSL, 447
przechodzenie po elementach HTML, 489przeci anie
metod, 61operatorów, 56
arytmetycznych, 60konwersji, 57
logicznych, 58relacji, 57
przeniesieniemetody, 334pliku, 299zapytania LINQ, 334
przestrzenie nazw, 79przestrze System.IO, 92przeszukiwanie sieci, 513przetwarzanie da , 264przyciski Bootstrap, 329przyjazne adresy URL, 506pseudoklasy
adresu, 475czasu, 475formularza, 475logiczne, 473struktury drzewa, 475struktury siatki, 475
pseudouwierzytelnianie, 250publikacja, 424publikacja systemu, 414pule aplikacji, 264punkt przerwania, 326puste linie, 24
QQueue Storage, 143
RRavenDB, 498razor, 202refleksja, 93, 95regiony, 290regu a CSS, 468rejestracja
u ytkownika, 369z u yciem Google, 371
relacjaFK, 166jeden do jednego, 161jeden do wielu, 161wiele do wielu, 162, 408
relacjeniezale ne, 166, 167opcjonalne, 165poprzez klucz obcy, 166
relacyjne bazy danych, 160repozytorium, 277, 335, 340, 410repozytorium generyczne, 278REST, 253
Kup książkę Poleć książkę
522 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
rodzajearkuszy stylów:, 468certyfikatów, 449
role, 242, 372routing, 214, 316
ignorowanie cie ek, 214kolejno , 214na podstawie atrybutów, 215, 252obszary, 217ograniczenia, 215w Web API, 257
rozpakowywanie, 32RP, Relying Party, 246rzutowanie, 31
Ssandbox, 509Scaffolding, 224schemat
dla Federated Authentication, 248DOM, 478formularza, 455gwiazdy, 504ko a, 503kontrolera, 225piramidy, 504wywo a , 192
schematylinkowania, 503mieszane, 505
Scrum, 439sekcja featured, 213sekcje, 211, 457selektory, 471, 485SEO, 329, 331, 343, 499separacja zagadnie , 436separatory cyfr, 124serializacja, 495Server Side Events, 461Service Bus Queue, 145Service Bus Relay, 144Service Bus Topic, 145Service Contract, 140serwer
hostingowy, 414IIS, 263
serwis z og oszeniami, 278sesje, 243silnik Razor, 203Silverlight, 142sk adnia
metod, 150zapyta , 151
skróty klawiszowe, 272skrypty, 209
blogowe, 503katalogów, 502
s owo kluczowe, 29as, 114async, 118, 230await, 118, 124, 230base, 106in, 111is, 114out, 111task, 230this, 106typeof, 114using, 71yield return, 97
snippety, 269SOA, 132SOAP, 253SoC, Separation of Concern, 436SOLID, 427sortowanie, 387
cyfr, 464og osze , 392
sprawdzaniedanych, 308warto ci null, 123
SQL Logging, 179SQL Server 2014, 266SQL Server Management Studio, 422SRP, 427SSL/TLS, 447stan aplikacji, 242strona
edycji, 377ufaj ca, 246
stronicowanie, 381struktura, 67
.NET, 135bazy danych, 305dokumentu, 470katalogów, 463projektów, 280projektu Repozytorium, 299
STS, 246systemy wymiany linków, 512szablon, 225
_Layout.cshtml, 365dokumentu HTML 5, 454
Kup książkę Poleć książkę
Skorowidz 523
ledzenie zmian, 175dynamiczne, 176migawkowe, 175
Ttabela
ogranicze , 217znaków szczególnych, 30
Table Storage, 143tablica, 34tablica typów, 28TDD, Test Driven Development, 440TempData, 204testy, 440TLS, Transport Layer Security, 448token, 246TPC, Table Per concrete Class, 179TPH, Table Per Hierarchy, 178TPT, Table Per Type, 178transakcje w EF, 174tryb Inspect Mode, 271Twitter Bootstrap, 329, 473tworzenie
bazy danych, 419, 420interfejsu dla repozytorium, 337klasy kontekstu, 290konta FTP, 421migracji pocz tkowej, 302modelu danych, 283nowego projektu, 279nowego projektu Repozytorium, 296obiektu XMLHttpRequest, 493paczek skryptów, 209profilu, 232referencji, 297
typ, 26ActionResult, 260HttpResponseMessage, 259void, 259wyliczeniowy, 31z aplikacji, 260
typyanonimowe, 105danych MIME, 444dopuszczaj ce warto ci zerowe, 33dynamiczne, 107pól formularza, 458rezultatu, 194walidacji, 449wyj tków, 240
tytu strony, 333
Uuchwyty HTTP, 193UoW, 410uruchamianie
aplikacji, 316CORS, 256pierwszej migracji, 304Web Deploy, 419
uruchomiona aplikacja, 295ustawienie
atrybutu, 463projektu startowego, 297
usuwaniekaskadowe, 177w z ów, 478
uwierzytelnianie, 241, 369, 370przez Windows ACS, 249za pomoc claimów, 245
Vview, 128, 130ViewBag, 204ViewData, 204ViewModel, 218, 402Virtual Machine, 144Visual Studio 2013, 269
Browser Link, 270GIT, 272JavaScript, 271JSON Editor, 271Microsoft Azure, 272pasek przewijania, 270podgl d definicji, 270skróty klawiszowe, 272tryb Inspect Mode, 271
Wwalidacja, 221, 449
strony, 466dania POST, 357
walidator W3C, 468warstwa modelu, 258, 294, 311warto ci
zerowe, 33zmiennych, 325
WCF, Windows Communication Foundation, 140WCF Endpoint, 142wci cia, 22wczytywanie
leniwe, 169zach anne, 168
Kup książkę Poleć książkę
524 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
wdra anie aplikacji, 423Web API, 251
ASP.NET MVC, 252CORS, 256Entity Framework, 258pobieranie danych, 261routing, 257typy, 258wersjonowanie, 262
Web API 2, 251Web Deploy, 420Web Role, 144Web serwis, 251, 253Web Site, 144Web Storage, 461WebSockets, 462wersje
j zyka C#, 20Windows Server 2012, 267
wersjonowanie w Web API, 262weryfikacja po o enia, 467widok, 200, 390, 400, 404
Details, 344dla konta Admin, 375dla konta Pracownik, 375dla niezalogowanych u ytkowników, 376dla zalogowanych u ytkowników, 375Index, 398Partial, 368, 402Partial View, 229, 386z layoutem, 229
widokicz ciowe, 201, 366typowane, 205
WIF, 245Windows ACS, 248Windows Azure Storage, 143Windows Server 2012, 267w a ciwo ci, 52w a ciwo ci XMLHttpRequest, 494w czenie NuGet, 281Worker Role, 144WPF, Windows Presentation Foundation, 139wstrzykiwanie
implementacji, 397kontekstu, 340repozytorium, 336
wybieranieklasy z modelem, 313miejsca publikacji, 423szablonu, 296tre ci modelu, 411typu aplikacji, 280
wygl daplikacji, 330–332aplikacji z paginacj , 385strony, 399
wyj tki, 77, 238wykonanie
natychmiastowe, 171odroczone, 171
wyra eniadla metod, 122dla w a ciwo ci, 122lambda, 74regularne, 89
wy wietlanie og osze , 397wywo ywanie metod, 51wzorce
architektoniczne, 125, 277projektowe, 277
wzorzecIoC, 277MVC, 185UnitOfWork, 278
XXMLHttpRequest, 493
Zzabezpieczanie akcji, 373zagnie d anie przestrzeni nazw, 79zainstalowane pakiety, 299zakup certyfikatu SSL, 450zapytania
bezpo rednie, 173LINQ, 150
zarz dzaniekontami FTP, 421wyj tkami
globalne, 239lokalne, 238
zasadaController, 433Creator, 433DRY, 435High Cohesion, 434Indirection, 435Information Expert, 433KISS, 436Low Coupling, 433odwrócenia zale no ci, 431otwarte-zamkni te, 428podstawienia Liskov, 428
Kup książkę Poleć książkę
Skorowidz 525
pojedynczej odpowiedzialno ci, 427Polymorphism, 434Protected Variations, 435Pure Fabrication, 434separacji interfejsów, 429YAGNI, 437
zasoby niezarz dzane, 70zastosowanie
atrybutu Serializable, 94ViewModel, 402
zbiór zasadGRASP, 432SOLID, 427
zdarzenia, 75, 464, 487zdobywanie
linków, 502sztucznych linków, 509
zg aszanie wyj tków, 77zmienne
domniemane, 105tylko do odczytu, 29
znaczniki HTML, 454, 459, 500zwalnianie zasobów niezarz dzanych, 70
daniaAJAX, 491HTTP, 445daniedo aplikacji ASP.NET, 189GET, 196, 445POST, 196, 446
Kup książkę Poleć książkę
526 C# 6.0 i MVC 5. Tworzenie nowoczesnych portali internetowych
Kup książkę Poleć książkę