Microsoft.NET: ASP.NET MVC + Entity Framework (Code First) Do realizacji projektu potrzebne jest zintegrowane środowisko programistyczne Microsoft Visual Studio 2012. W ramach projektu budowana jest prosta aplikacja wykorzystująca framework MVC, bazująca na modelu bazy danych utworzonym zgodnie ze strategią Code First. Aplikacja zostanie wygenerowana narzędziem MVC Scaffolding. Kroki ćwiczenia: 1. Utworzenie nowego projektu. a) Uruchom narzędzie Microsoft Visual Studio jeśli nie jest jeszcze uruchomione. b) Z menu głównego wybierz File New Project. Wybierz szablon ASP.NET MVC 4 Web Application z kategorii Visual C# -> Web. Jako nazwę projektu podaj MvcNews. Pozostałe opcje pozostaw domyślne i kliknij przycisk OK. c) W kolejnym kroku kreatora jako szablon projektu MVC 4 wybierz Internet Application. Upewnij się, że jako silnik widoków wybrany jest Razor (sprawdź jakie inne opcje są do wyboru). Nie zaznaczaj opcji tworzenia projektu dla testów jednostkowych.
d) Obejrzyj strukturę projektu w panelu Solution Explorer zwracając uwagę na utworzone przez kreator foldery. e) Obejrzyj kod startowy aplikacji w pliku Global.asax.cs. Odszukaj w folderze App_Start plik zawierający reguły routingu dla aplikacji i obejrzyj jego zawartość. f) Uruchom projekt kombinacją klawiszy Ctrl+F5. g) Przetestuj nawigację po stronach aplikacji zwracając uwagę na zawartość paska adresu w przeglądarce. 2. Utworzenie obiektowego modelu danych w projekcie zgodnie ze strategią Code First. a) W panelu Solution Explorer wywołaj prawym klawiszem myszy menu kontekstowe dla folderu Models projektu i wybierz opcję Add -> Class. Jako nazwę pliku podaj NewsItem.cs.
b) W utworzonej klasie zdefiniuj jako publiczne poniższe właściwości: int DateTime string typ nazwa Id TimeStamp Text c) W tym samym pliku (i w tej samej przestrzeni nazw) dodaj poniższą klasę kontekstu bazy danych: public class NewsDBContext : DbContext { public DbSet<NewsItem> News { get; set; } } Zaimportuj odpowiednią przestrzeń nazw. d) Przejdź do edycji głównego pliku Web.config projektu. W sekcji <connectionstrings> dodaj poniższą definicję połączenia z bazą danych: <add name="newsconnection" connectionstring="data Source=(LocalDb)\v11.0; Integrated Security=SSPI; AttachDBFilename= DataDirectory \News.mdf" providername="system.data.sqlclient" /> Zwróć uwagę, że wskazany plik bazy danych jeszcze nie istnieje. Zostanie on utworzony automatycznie zgodnie ze strategią Code First. e) Zdefiniowany wcześniej kontekst bazy danych domyślnie oczekuje połączenia z bazą danych o nazwie takiej jak nazwa klasy kontekstu. Ponieważ zdefiniowaliśmy połączenie o innej nazwie, musimy je jawnie przypisać do kontekstu definiując w klasie kontekstu poniższy konstruktor. public NewsDBContext () : base("newsconnection") {} f) Przebuduj projekt (Build). 3. Wygenerowanie kontrolerów i widoków do obsługi modelu. a) Z menu kontekstowego węzła Controllers w panelu Solution Explorer wybierz opcję Add -> Controller. W kreatorze kontrolera popraw nazwę jego klasy na NewsController, wybierz szablon scaffoldingu MVC controller with read/write action and views, using Entity Framework, wybierz utworzoną wcześniej klasę modelu i kontekstu bazy danych oraz upewnij się, że jako silnik widoków wybrany jest Razor.
b) Obejrzyj wygenerowaną klasę kontrolera i związane z nim widoki. c) Odszukaj w strukturze projektu stronę wzorcową _Layout.cshtml i dodaj w menu, które wyświetla się na każdej stronie u góry, link wywołujący akcję Index kontrolera News. d) Uruchom aplikację i przetestuj jej działanie dodając, edytując, przeglądając i usuwając dane. Uwaga: Wprowadzając nowe dane etykietę czasową podawaj w formacie YYYY-MM-DD HH24:MI:SS (możesz pominąć czas i podać samą datę). e) Poprzez panel Server Explorer połącz się z bazą danych i obejrzyj zawartość automatycznie utworzonej tabeli News. 4. Ustawienie domyślnej daty dodawanych newsów na bieżącą. a) Dodaj publiczny konstruktor w klasie NewsItem, który ustawi datę na bieżącą (System.DateTime.Now). b) W metodzie Create() kontrolera News (wywoływanej metodą GET HTTP) utwórz nowy obiekt NewsItem i przekaż go do widoku. c) Uruchom aplikację i przetestuj dodawanie nowych newsów. 5. Dodanie obowiązkowości i weryfikacji długości tekstu newsa. a) Dodaj w klasie encji NewsItem następujące adnotacje: (1) włączającą obowiązkowość tekstu newsa, (2) weryfikującą, że jego długość wynosi od 5 do 140 znaków, (3) wskazującą że etykieta czasowa newsa jest typu daty (aby nie wyświetlały się składniki czasu). Nie zapomnij o zaimportowaniu przestrzeni nazw adnotacji.
b) Uruchom aplikację aby przetestować działanie dodanych adnotacji. Zinterpretuj wyjątek, który zostanie zgłoszony. 6. Migracja bazy danych aby odpowiadała ona zmodyfikowanemu modelowi aplikacji. a) Przebuduj projekt (Rebuild). b) Otwórz okno narzędzia Package Manager Console (Tools->Library Package Manager->Package Manager Console). c) Wykonaj w oknie Package Manager Console kolejno poniższe komendy. Ewentualnie skoryguj w pierwszym poleceniu nazwę typu kontekstu obsługującego newsy jeśli jest inna w Twoim projekcie. Enable-Migrations -ContextTypeName MvcNews.Models.NewsDBContext add-migration AddDataAnnotationsMig update-database d) Ponownie uruchom projekt i przetestuj walidację ograniczeń na treść newsa.