ASP.NET MVC 4 — modele i dostęp do danych

Autor: Web Camps Team

Pobierz zestaw szkoleniowy obozów internetowych

W tym praktycznym laboratorium założono, że masz podstawową wiedzę na temat ASP.NET MVC. Jeśli wcześniej nie użyto ASP.NET MVC , zalecamy zapoznanie się z ASP.NET ćwiczenia praktyczne w zakresie mvC 4 Fundamentals .

To laboratorium przeprowadzi Cię przez ulepszenia i nowe funkcje opisane wcześniej przez zastosowanie drobnych zmian do przykładowej aplikacji internetowej udostępnionej w folderze Source.

Uwaga

Wszystkie przykładowe kod i fragmenty kodu znajdują się w zestawie szkoleniowym Web Camps dostępnym w witrynie Microsoft-Web/WebCampTrainingKit Releases. Projekt specyficzny dla tego laboratorium jest dostępny w ASP.NET modelach MVC 4 i dostępie do danych.

W ASP.NET praktycznym laboratorium MVC przekazujesz trwale zakodowane dane z kontrolerów do szablonów widoków. Jednak w celu utworzenia prawdziwej aplikacji internetowej warto użyć prawdziwej bazy danych.

W tym praktycznym laboratorium pokazano, jak używać aparatu bazy danych do przechowywania i pobierania danych wymaganych przez aplikację Do sklepu Music Store. W tym celu zaczniesz od istniejącej bazy danych i utworzysz na jej podstawie model danych jednostki. W tym laboratorium poznasz podejście Database First , a także podejście Code First .

Można jednak również użyć podejścia Model First , utworzyć ten sam model przy użyciu narzędzi, a następnie wygenerować na jego podstawie bazę danych.

Database First a Model First

Database First a Model First

Po wygenerowaniu modelu należy wprowadzić odpowiednie korekty w module StoreController w celu udostępnienia widoków sklepu z danymi pobranymi z bazy danych, zamiast używać zakodowanych danych. Nie trzeba wprowadzać żadnych zmian w szablonach widoków, ponieważ StoreController zwróci te same modele ViewModels do szablonów widoków, chociaż tym razem dane będą pochodzić z bazy danych.

Podejście Code First

Podejście Code First umożliwia zdefiniowanie modelu z kodu bez generowania klas, które są zwykle powiązane ze strukturą.

Najpierw w kodzie obiekty modelu są definiowane za pomocą obiektów POC, "Plain Old CLR Objects". Obiekty POCO to proste klasy zwykłe, które nie mają dziedziczenia i nie implementują interfejsów. Możemy automatycznie wygenerować bazę danych na ich podstawie lub użyć istniejącej bazy danych i wygenerować mapowanie klas na podstawie kodu.

Korzyści wynikające z używania tego podejścia polegają na tym, że model pozostaje niezależny od struktury trwałości (w tym przypadku platformy Entity Framework), ponieważ klasy poCO nie są powiązane z platformą mapowania.

Uwaga

To laboratorium jest oparte na ASP.NET MVC 4 i wersji przykładowej aplikacji sklepu Music Store dostosowanej i zminimalizowanej tak, aby pasowały tylko do funkcji wyświetlanych w tym laboratorium Hands-On.

Jeśli chcesz zapoznać się z całą aplikacją samouczka sklepu Music Store , możesz ją znaleźć w sklepie MVC-Music-Store.

Wymagania wstępne

Aby ukończyć to laboratorium, musisz mieć następujące elementy:

Konfigurowanie

Instalowanie fragmentów kodu

Dla wygody większość kodu, którym będziesz zarządzać w tym laboratorium, jest dostępna jako fragmenty kodu programu Visual Studio. Aby zainstalować fragmenty kodu, uruchom plik .\Source\Setup\CodeSnippets.vsi .

Jeśli nie znasz Visual Studio Code fragmentów kodu i chcesz dowiedzieć się, jak ich używać, możesz zapoznać się z dodatkiem z tego dokumentu "Dodatek C: Używanie fragmentów kodu".


Ćwiczenia

To praktyczne laboratorium składa się z następujących ćwiczeń:

  1. Ćwiczenie 1. Dodawanie bazy danych
  2. Ćwiczenie 2. Tworzenie bazy danych przy użyciu funkcji Code First
  3. Ćwiczenie 3. Wykonywanie zapytań względem bazy danych przy użyciu parametrów

Uwaga

Każdemu ćwiczeniu towarzyszy folder End zawierający wynikowe rozwiązanie, które należy uzyskać po zakończeniu ćwiczeń. Możesz użyć tego rozwiązania jako przewodnika, jeśli potrzebujesz dodatkowej pomocy podczas wykonywania ćwiczeń.

Szacowany czas ukończenia tego laboratorium: 35 minut.

Ćwiczenie 1. Dodawanie bazy danych

W tym ćwiczeniu dowiesz się, jak dodać bazę danych z tabelami aplikacji MusicStore do rozwiązania w celu korzystania z jej danych. Po wygenerowaniu bazy danych za pomocą modelu i dodaniu jej do rozwiązania zmodyfikujesz klasę StoreController, aby udostępnić szablon View z danymi pobranymi z bazy danych, zamiast używać zakodowanych wartości.

Zadanie 1 — dodawanie bazy danych

W tym zadaniu do rozwiązania dodasz już utworzoną bazę danych z głównymi tabelami aplikacji MusicStore.

  1. Otwórz rozwiązanie Begin znajdujące się w folderze Source/Ex1-AddingADatabaseDBFirst/Begin/ .

    1. Zanim przejdziesz dalej, musisz pobrać brakujące pakiety NuGet. W tym celu kliknij menu Project (Projekt ) i wybierz polecenie Manage NuGet Packages (Zarządzaj pakietami NuGet).

    2. W oknie dialogowym Zarządzanie pakietami NuGet kliknij pozycję Przywróć , aby pobrać brakujące pakiety.

    3. Na koniec skompiluj rozwiązanie, klikając pozycjęKompiluj rozwiązanie kompilacji | .

      Uwaga

      Jedną z zalet korzystania z narzędzia NuGet jest to, że nie trzeba dostarczać wszystkich bibliotek w projekcie, zmniejszając rozmiar projektu. Za pomocą narzędzi NuGet Power Tools, określając wersje pakietów w pliku Packages.config, będzie można pobrać wszystkie wymagane biblioteki przy pierwszym uruchomieniu projektu. Dlatego po otwarciu istniejącego rozwiązania z tego laboratorium należy wykonać te kroki.

  2. Dodaj plik bazy danych MvcMusicStore . W tym praktycznym laboratorium użyjesz już utworzonej bazy danych o nazwie MvcMusicStore.mdf. W tym celu kliknij prawym przyciskiem myszy folder App_Data , wskaż polecenie Dodaj , a następnie kliknij pozycję Istniejący element. Przejdź do folderu \Source\Assets i wybierz plik MvcMusicStore.mdf .

    Dodawanie istniejącego elementu

    Dodawanie istniejącego elementu

    Plik bazy danych MvcMusicStore.mdf

    Plik bazy danych MvcMusicStore.mdf

    Baza danych została dodana do projektu. Nawet jeśli baza danych znajduje się wewnątrz rozwiązania, możesz wykonywać zapytania i aktualizować ją tak, jak była hostowana na innym serwerze bazy danych.

    Baza danych MvcMusicStore w bazie danych Eksplorator rozwiązań

    Baza danych MvcMusicStore w Eksplorator rozwiązań

  3. Sprawdź połączenie z bazą danych. W tym celu kliknij dwukrotnie plik MvcMusicStore.mdf , aby nawiązać połączenie.

    Nawiązywanie połączenia z plikiem MvcMusicStore.mdf

    Nawiązywanie połączenia z biblioteką MvcMusicStore.mdf

Zadanie 2 . Tworzenie modelu danych

W tym zadaniu utworzysz model danych umożliwiający interakcję z bazą danych dodaną w poprzednim zadaniu.

  1. Utwórz model danych, który będzie reprezentować bazę danych. W tym celu w Eksplorator rozwiązań kliknij prawym przyciskiem myszy folder Models, wskaż polecenie Dodaj, a następnie kliknij pozycję Nowy element. W oknie dialogowym Dodawanie nowego elementu wybierz szablon Dane , a następnie element ADO.NET Modelu danych jednostki . Zmień nazwę modelu danych na StoreDB.edmx i kliknij przycisk Dodaj.

    Dodawanie modelu danych jednostki storeDB ADO.NET

    Dodawanie modelu danych jednostki ADO.NET StoreDB

  2. Zostanie wyświetlony Kreator modelu danych jednostek. Ten kreator przeprowadzi Cię przez proces tworzenia warstwy modelu. Ponieważ model powinien zostać utworzony na podstawie ostatnio dodanej istniejącej bazy danych, wybierz pozycję Generuj z bazy danych i kliknij przycisk Dalej.

    Wybieranie zawartości modelu

    Wybieranie zawartości modelu

  3. Ponieważ generujesz model z bazy danych, musisz określić połączenie do użycia. Kliknij pozycję Nowe połączenie.

  4. Wybierz pozycję Microsoft SQL Server Database File (Plik bazy danych microsoft SQL Server), a następnie kliknij przycisk Continue (Kontynuuj).

    Wybieranie źródła danych

    Okno dialogowe Wybieranie źródła danych

  5. Kliknij przycisk Przeglądaj i wybierz bazę danych MvcMusicStore.mdf znajdującą się w folderze App_Data , a następnie kliknij przycisk OK.

    Właściwości połączenia Właściwości połączenia

    Właściwości połączenia

  6. Wygenerowana klasa powinna mieć taką samą nazwę jak parametry połączenia jednostki, więc zmień jej nazwę na MusicStoreEntities i kliknij przycisk Dalej.

    Wybieranie połączenia danych

    Wybieranie połączenia danych

  7. Wybierz obiekty bazy danych do użycia. Ponieważ model jednostki będzie używać tylko tabel bazy danych, wybierz opcję Tabele i upewnij się, że zaznaczono również opcje Uwzględnij klucz obcy w modelu i Pluralize lub z pojedynczą wygenerowanymi nazwami obiektów . Zmień przestrzeń nazw modelu na MvcMusicStore.Model i kliknij przycisk Zakończ.

    Wybieranie obiektów bazy danych

    Wybieranie obiektów bazy danych

    Uwaga

    Jeśli zostanie wyświetlone okno dialogowe Ostrzeżenie o zabezpieczeniach, kliknij przycisk OK , aby uruchomić szablon i wygenerować klasy dla jednostek modelu.

  8. Zostanie wyświetlony diagram jednostki dla bazy danych, a zostanie utworzona oddzielna klasa, która mapuje każdą tabelę na bazę danych. Na przykład tabela Albumy będzie reprezentowana przez klasę Album , gdzie każda kolumna w tabeli będzie mapować na właściwość klasy. Umożliwi to wykonywanie zapytań i pracę z obiektami reprezentującymi wiersze w bazie danych.

    Diagram jednostki

    Diagram jednostki

    Uwaga

    Szablony T4 (tt) uruchamiają kod w celu wygenerowania klas jednostek i zastąpią istniejące klasy o tej samej nazwie. W tym przykładzie klasy "Album", "Gatunek" i "Artysta" zostały zastąpione wygenerowanym kodem.

Zadanie 3 . Kompilowanie aplikacji

W tym zadaniu sprawdzisz, że mimo że generacja modelu usunęła klasy modelu Album, Gatunek i Artysta , projekt zostanie pomyślnie skompilowany przy użyciu nowych klas modelu danych.

  1. Skompiluj projekt, wybierając element menu Kompilacja , a następnie utwórz mvcMusicStore.

    Kompilowanie projektu Kompilowanie

    Kompilowanie projektu

  2. Pomyślnie skompiluje się projekt. Dlaczego nadal działa? Działa to, ponieważ tabele bazy danych zawierają pola zawierające właściwości używane w usuniętych klasach Album i Gatunek.

    Kompilacje zakończyły

    Kompilacje zakończyły się pomyślnie

  3. Podczas gdy projektant wyświetla jednostki w formacie diagramu, są to naprawdę klasy języka C#. Rozwiń węzeł StoreDB.edmx w Eksplorator rozwiązań, a następnie StoreDB.tt zobaczysz nowe wygenerowane jednostki.

    Wygenerowane pliki

    Wygenerowane pliki

Zadanie 4 . Wykonywanie zapytań dotyczących bazy danych

W tym zadaniu zaktualizujesz klasę StoreController, aby zamiast używać zakodowanych na stałe danych, wykona zapytanie względem bazy danych w celu pobrania informacji.

  1. Otwórz plik Controllers\StoreController.cs i dodaj następujące pole do klasy w celu przechowywania wystąpienia klasy MusicStoreEntities o nazwie storeDB:

    (Fragment kodu — modele i dostęp do danych — Ex1 storeDB)

    public class StoreController : Controller
    {
        private MusicStoreEntities storeDB = new MusicStoreEntities();
    
  2. Klasa MusicStoreEntities uwidacznia właściwość kolekcji dla każdej tabeli w bazie danych. Zaktualizuj metodę akcji Przeglądaj , aby pobrać gatunek ze wszystkimi albumami.

    (Fragment kodu — modele i dostęp do danych — Przeglądanie ex1 Store)

    public ActionResult Browse(string genre)
    {
        // Retrieve Genre and its Associated Albums from database
        var genreModel = new Genre
        {
            Name = genre,
            Albums = this.storeDB.Albums.ToList()
        };
    
        return this.View(genreModel);
    }
    

    Uwaga

    Używasz możliwości platformy .NET o nazwie LINQ (zapytanie zintegrowane z językiem) do pisania silnie typiowanych wyrażeń zapytań względem tych kolekcji — które będą wykonywać kod względem bazy danych i zwracać obiekty, względem których można programować.

    Aby uzyskać więcej informacji na temat LINQ, odwiedź witrynę msdn.

  3. Zaktualizuj metodę akcji Indeks , aby pobrać wszystkie gatunki.

    (Fragment kodu — modele i dostęp do danych — indeks ex1 Store)

    public ActionResult Index()
    {
        var genres = this.storeDB.Genres;
    
        return this.View(genres);
    }
    
  4. Zaktualizuj metodę akcji Indeks , aby pobrać wszystkie gatunki i przekształcić kolekcję na listę.

    (Fragment kodu — modele i dostęp do danych — Ex1 Store GenreMenu)

    // GET: /Store/GenreMenu
    [ChildActionOnly]
    public ActionResult GenreMenu()
    {
        var genres = this.storeDB.Genres.Take(9).ToList();
    
        return this.PartialView(genres);
    }
    

Zadanie 5 . Uruchamianie aplikacji

W tym zadaniu sprawdzisz, czy na stronie Indeks sklepu będą teraz wyświetlane gatunki przechowywane w bazie danych zamiast zakodowanych na stałe. Nie ma potrzeby zmiany szablonu Widok, ponieważ kontroler StoreController zwraca te same jednostki co poprzednio, chociaż tym razem dane będą pochodzić z bazy danych.

  1. Skompiluj rozwiązanie i naciśnij klawisz F5 , aby uruchomić aplikację.

  2. Projekt rozpoczyna się na stronie głównej. Sprawdź, czy menu gatunków nie jest już zakodowaną na stałe listą, a dane są pobierane bezpośrednio z bazy danych.

    Zrzut ekranu przedstawia stronę gatunku muzyki, na której można zweryfikować menu Gatunki.

    Przeglądanie gatunków z bazy danych

  3. Teraz przejdź do dowolnego gatunku i sprawdź, czy albumy są wypełniane z bazy danych.

    Zrzut ekranu przedstawia widok, w którym można przeglądać albumy z bazy danych.

    Przeglądanie albumów z bazy danych

Ćwiczenie 2. Tworzenie bazy danych przy użyciu metody Code First

W tym ćwiczeniu dowiesz się, jak za pomocą podejścia Code First utworzyć bazę danych z tabelami aplikacji MusicStore oraz jak uzyskać dostęp do jej danych.

Po wygenerowaniu modelu zmodyfikujesz kontroler StoreController, aby udostępnić szablon Widok danymi pobranymi z bazy danych, zamiast używać zakodowanych na stałe wartości.

Uwaga

Jeśli ukończono ćwiczenie 1 i już pracowaliśmy z podejściem Database First, teraz dowiesz się, jak uzyskać te same wyniki przy użyciu innego procesu. Zadania wspólne z ćwiczeniem 1 zostały oznaczone, aby ułatwić czytanie. Jeśli ćwiczenie 1 nie zostało ukończone, ale chcesz poznać podejście Code First, możesz zacząć od tego ćwiczenia i uzyskać pełny zakres tematu.

Zadanie 1 . Wypełnianie przykładowych danych

W tym zadaniu wypełnisz bazę danych przykładowymi danymi, gdy zostanie ona początkowo utworzona przy użyciu funkcji Code-First.

  1. Otwórz rozwiązanie Begin znajdujące się w folderze Source/Ex2-CreatingADatabaseCodeFirst/Begin/ . W przeciwnym razie możesz kontynuować korzystanie z rozwiązania końcowego uzyskanego przez ukończenie poprzedniego ćwiczenia.

    1. Jeśli otwarto podane rozwiązanie Begin , przed kontynuowanie należy pobrać brakujące pakiety NuGet. W tym celu kliknij menu Project (Projekt ) i wybierz polecenie Manage NuGet Packages (Zarządzaj pakietami NuGet).

    2. W oknie dialogowym Zarządzanie pakietami NuGet kliknij pozycję Przywróć , aby pobrać brakujące pakiety.

    3. Na koniec skompiluj rozwiązanie, klikając pozycjęKompiluj rozwiązanie kompilacji | .

      Uwaga

      Jedną z zalet korzystania z narzędzia NuGet jest to, że nie trzeba dostarczać wszystkich bibliotek w projekcie, zmniejszając rozmiar projektu. Za pomocą narzędzi NuGet Power Tools, określając wersje pakietów w pliku Packages.config, będzie można pobrać wszystkie wymagane biblioteki przy pierwszym uruchomieniu projektu. Dlatego po otwarciu istniejącego rozwiązania z tego laboratorium należy wykonać te kroki.

  2. Dodaj plik SampleData.cs do folderu Models . W tym celu kliknij prawym przyciskiem myszy folder Modele , wskaż polecenie Dodaj , a następnie kliknij pozycję Istniejący element. Przejdź do folderu \Source\Assets i wybierz plik SampleData.cs .

    Przykładowe dane wypełniają kod Przykładowe

    Przykładowe dane wypełniają kod

  3. Otwórz plik Global.asax.cs i dodaj następujące instrukcje using .

    (Fragment kodu — modele i dostęp do danych — użycie globalnego asax ex2)

    using MvcMusicStore.Models;
    using System.Data.Entity;
    
  4. W metodzie Application_Start() dodaj następujący wiersz, aby ustawić inicjator bazy danych.

    (Fragment kodu — modele i dostęp do danych — ex2 globalny zestaw asax SetInitializer)

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
    
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    
        Database.SetInitializer(new SampleData());
    }
    

Zadanie 2 . Konfigurowanie połączenia z bazą danych

Teraz, gdy baza danych została już dodana do naszego projektu, zapiszesz w Web.config parametry połączenia.

  1. Dodaj parametry połączenia w Web.config. W tym celu otwórz Web.config w katalogu głównym projektu i zastąp parametry połączenia o nazwie DefaultConnection tym wierszem w <sekcji connectionStrings> :

     lokalizacja plikuWeb.config

    lokalizacja plikuWeb.config

    <configuration>
    ...
      <connectionStrings>
        <add name="MusicStoreEntities" connectionString="data source=(LocalDb)\v11.0;initial catalog=MvcMusicStore;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MvcMusicStore.mdf" providerName="System.Data.SqlClient" />
      </connectionStrings>
    ...
    

Zadanie 3 . Praca z modelem

Teraz, gdy już skonfigurowano połączenie z bazą danych, połączysz model z tabelami bazy danych. W tym zadaniu utworzysz klasę, która zostanie połączona z bazą danych za pomocą funkcji Code First. Należy pamiętać, że istnieje istniejąca klasa modelu POCO, która powinna zostać zmodyfikowana.

Uwaga

Jeśli ukończono ćwiczenie 1, zauważysz, że ten krok został wykonany przez kreatora. Wykonując metodę Code First, ręcznie utworzysz klasy, które będą połączone z jednostkami danych.

  1. Otwórz klasę modelu POCO Gatunek z folderu projektu Modele i dołącz identyfikator. Użyj właściwości int o nazwie GenreId.

    (Fragment kodu — modele i dostęp do danych — Ex2 Code First Gatunek)

    namespace MvcMusicStore.Models
    {
        using System.Collections.Generic;
    
        public class Genre
        {
          public int GenreId { get; set; }
    
          public string Name { get; set; }
    
          public string Description { get; set; }
    
          public List<Album> Albums { get; set; }
        }
    }
    

    Uwaga

    Aby pracować z konwencjami Code First, gatunek klasy musi mieć właściwość klucza podstawowego, która zostanie automatycznie wykryta.

    Więcej informacji na temat konwencji code first można przeczytać w tym artykule msdn.

  2. Teraz otwórz folder projektu Album klasy modelu POCO z modeli i dołącz klucze obce, utwórz właściwości o nazwach GenreId i ArtistId. Ta klasa ma już identyfikator Gatunek dla klucza podstawowego.

    (Fragment kodu — modele i dostęp do danych — Ex2 Code First Album)

    namespace MvcMusicStore.Models
    {
        public class Album
        {
            public int AlbumId { get; set; }
    
            public int GenreId { get; set; }
    
            public int ArtistId { get; set; }
    
            public string Title { get; set; }
    
            public decimal Price { get; set; }
    
            public string AlbumArtUrl { get; set; }
    
            public virtual Genre Genre { get; set; }
    
            public virtual Artist Artist { get; set; }
        }
    }
    
  3. Otwórz klasę modelu POCO Artist i dołącz właściwość ArtistId .

    (Fragment kodu — modele i dostęp do danych — Ex2 Code First Artist)

    namespace MvcMusicStore.Models
    {
        public class Artist
        {
            public int ArtistId { get; set; }
    
            public string Name { get; set; }
        }
    }
    
  4. Kliknij prawym przyciskiem myszy folder projektu Models i wybierz pozycję Dodaj | Klasa. Nadaj plikowi nazwę MusicStoreEntities.cs. Następnie kliknij przycisk Dodaj.

    Dodawanie klasy Dodawanie klasy

    Dodawanie nowego elementu

    Dodawanie klasy 2 Dodawanie

    Dodawanie klasy

  5. Otwórz właśnie utworzoną klasę MusicStoreEntities.cs i dołącz przestrzenie nazw System.Data.Entity i System.Data.Entity.Infrastructure.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    ...
    
  6. Zastąp deklarację klasy, aby rozszerzyć klasę DbContext : zadeklarować publiczny zestaw DBSet i zastąpić metodę OnModelCreating . Po wykonaniu tego kroku uzyskasz klasę domeny, która będzie łączyć model z programem Entity Framework. Aby to zrobić, zastąp kod klasy następującym kodem:

    (Fragment kodu — modele i dostęp do danych — Ex2 Code First MusicStoreEntities)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    
    namespace MvcMusicStore.Models
    {
        public class MusicStoreEntities : DbContext
        {
            public DbSet<Genre> Genres { get; set; }
    
            public DbSet<Album> Albums { get; set; }
    
            public DbSet<Artist> Artists { get; set; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Entity<Genre>().ToTable("Genres");
                modelBuilder.Entity<Album>().ToTable("Albums");
                modelBuilder.Entity<Artist>().ToTable("Artists");
    
                base.OnModelCreating(modelBuilder);
            }
        }
    }
    

Uwaga

Dzięki funkcji Entity Framework DbContext i DBSet będzie można wykonywać zapytania dotyczące gatunku klasy POCO. Rozszerzając metodę OnModelCreating , określasz w kodzie sposób mapowania gatunku na tabelę bazy danych. Więcej informacji na temat zestawu DBContext i DBSet można znaleźć w tym artykule msdn: link

Zadanie 4 . Wykonywanie zapytań względem bazy danych

W tym zadaniu zaktualizujesz klasę StoreController, aby zamiast używać zakodowanych na stałe danych, pobrać ją z bazy danych.

Uwaga

To zadanie jest wspólne z ćwiczeniem 1.

Jeśli ukończono ćwiczenie 1, należy pamiętać, że te kroki są takie same w obu podejściach (najpierw baza danych lub kod). Różnią się one w sposobie, w jaki dane są połączone z modelem, ale dostęp do jednostek danych jest jeszcze niewidoczny dla kontrolera.

  1. Otwórz plik Controllers\StoreController.cs i dodaj następujące pole do klasy w celu przechowywania wystąpienia klasy MusicStoreEntities o nazwie storeDB:

    (Fragment kodu — modele i dostęp do danych — Ex1 storeDB)

    public class StoreController : Controller
    {
        private MusicStoreEntities storeDB = new MusicStoreEntities();
        ...
    }
    
  2. Klasa MusicStoreEntities uwidacznia właściwość kolekcji dla każdej tabeli w bazie danych. Zaktualizuj metodę akcji Przeglądaj , aby pobrać gatunek ze wszystkimi albumami.

    (Fragment kodu — modele i dostęp do danych — Przeglądanie w sklepie Ex2)

    public ActionResult Browse(string genre)
    {
         // Retrieve Genre and its Associated Albums from database
         var genreModel = new Genre
        {
            Name = genre,
            Albums = this.storeDB.Albums.ToList()
        };
    
         return this.View(genreModel);
    }
    

    Uwaga

    Używasz możliwości platformy .NET o nazwie LINQ (zapytania zintegrowanego z językiem) do zapisywania silnie typiowanych wyrażeń zapytań względem tych kolekcji — które będą wykonywać kod względem bazy danych i zwracać obiekty, względem których można programować.

    Aby uzyskać więcej informacji na temat LINQ, odwiedź witrynę msdn.

  3. Zaktualizuj metodę akcji indeksu , aby pobrać wszystkie gatunki.

    (Fragment kodu — modele i dostęp do danych — Indeks magazynu Ex2)

    public ActionResult Index()
    {
        var genres = this.storeDB.Genres;
    
        return this.View(genres);
    }
    
  4. Zaktualizuj metodę akcji Indeks , aby pobrać wszystkie gatunki i przekształcić kolekcję na listę.

    (Fragment kodu — modele i dostęp do danych — Gatunek sklepu Ex2Menu)

    // GET: /Store/GenreMenu
    [ChildActionOnly]
    public ActionResult GenreMenu()
    {
        var genres = this.storeDB.Genres.Take(9).ToList();
    
        return this.PartialView(genres);
    }
    

Zadanie 5 . Uruchamianie aplikacji

W tym zadaniu sprawdzisz, czy strona Indeks sklepu będzie teraz wyświetlać gatunki przechowywane w bazie danych zamiast zakodowanych na stałe. Nie ma potrzeby zmiany szablonu Widok, ponieważ StoreController zwraca ten sam model StoreIndexViewModel , ale tym razem dane pochodzą z bazy danych.

  1. Skompiluj rozwiązanie i naciśnij klawisz F5 , aby uruchomić aplikację.

  2. Projekt rozpoczyna się na stronie głównej. Sprawdź, czy menu gatunków nie jest już zakodowaną listą, a dane są pobierane bezpośrednio z bazy danych.

    Zrzut ekranu przedstawia stronę gatunku muzycznego, na której można sprawdzić, czy menu Gatunki jest pobierane z bazy danych.

    Przeglądanie gatunków z bazy danych

  3. Teraz przejdź do dowolnego gatunku i sprawdź, czy albumy są wypełniane z bazy danych.

    Zrzut ekranu przedstawia widok, w którym można sprawdzić, czy albumy są wypełniane z bazy danych.

    Przeglądanie albumów z bazy danych

Ćwiczenie 3. Wykonywanie zapytań względem bazy danych przy użyciu parametrów

W tym ćwiczeniu dowiesz się, jak wykonywać zapytania dotyczące bazy danych przy użyciu parametrów i jak używać kształtowania wyników zapytania, czyli funkcji zmniejszającej liczbę, do której baza danych uzyskuje dostęp do danych w bardziej wydajny sposób.

Uwaga

Aby uzyskać więcej informacji na temat kształtowania wyników zapytania, odwiedź następujący artykuł msdn.

Zadanie 1 — modyfikowanie elementu StoreController w celu pobierania albumów z bazy danych

W tym zadaniu zmienisz klasę StoreController , aby uzyskać dostęp do bazy danych w celu pobrania albumów z określonego gatunku.

  1. Otwórz rozwiązanie Begin znajdujące się w folderze Source\Ex3-QueryingTheDatabaseWithParametersCodeFirst\Begin , jeśli chcesz użyć podejścia Code-First lub source\Ex3-QueryingTheDatabaseWithParametersDBFirst\Begin , jeśli chcesz użyć podejścia Database-First. W przeciwnym razie możesz kontynuować korzystanie z rozwiązania Końcowego uzyskanego przez ukończenie poprzedniego ćwiczenia.

    1. Po otwarciu podanego rozwiązania Begin należy pobrać niektóre brakujące pakiety NuGet przed kontynuowaniem. Aby to zrobić, kliknij menu Projekt i wybierz pozycję Zarządzaj pakietami NuGet.

    2. W oknie dialogowym Zarządzanie pakietami NuGet kliknij przycisk Przywróć , aby pobrać brakujące pakiety.

    3. Na koniec skompiluj rozwiązanie, klikając pozycję Kompiluj | rozwiązanie.

      Uwaga

      Jedną z zalet korzystania z narzędzia NuGet jest to, że nie trzeba dostarczać wszystkich bibliotek w projekcie, zmniejszając rozmiar projektu. Za pomocą narzędzi NuGet Power Tools, określając wersje pakietów w pliku Packages.config, będzie można pobrać wszystkie wymagane biblioteki przy pierwszym uruchomieniu projektu. Dlatego należy uruchomić te kroki po otwarciu istniejącego rozwiązania z tego laboratorium.

  2. Otwórz klasę StoreController , aby zmienić metodę akcji Przeglądaj . W tym celu w Eksplorator rozwiązań rozwiń folder Controllers i kliknij dwukrotnie plik StoreController.cs.

  3. Zmień metodę akcji Przeglądaj , aby pobrać albumy dla określonego gatunku. W tym celu zastąp następujący kod:

    (Fragment kodu — modele i dostęp do danych — Ex3 StoreController BrowseMethod)

    public ActionResult Browse(string genre)
    {
        // Retrieve Genre and its Associated Albums from database
        var genreModel = this.storeDB.Genres.Include("Albums")
            .Single(g => g.Name == genre);
    
        return this.View(genreModel);
    }
    

Uwaga

Aby wypełnić kolekcję jednostki, należy użyć metody Include , aby określić, czy chcesz pobrać albumy. Możesz użyć polecenia . Rozszerzenie single() w LINQ, ponieważ w tym przypadku tylko jeden gatunek jest oczekiwany dla albumu. Metoda Single() przyjmuje wyrażenie lambda jako parametr, który w tym przypadku określa pojedynczy obiekt gatunku, tak aby jego nazwa odpowiadała zdefiniowanej wartości.

Skorzystasz z funkcji, która umożliwia wskazanie innych powiązanych jednostek, które mają zostać załadowane, a także po pobraniu obiektu gatunku. Ta funkcja jest nazywana kształtowaniem wyników zapytania i umożliwia zmniejszenie liczby potrzebnych do uzyskania dostępu do bazy danych w celu pobrania informacji. W tym scenariuszu chcesz wstępnie pobrać albumy dla pobranego gatunku.

Zapytanie zawiera ciąg Genres.Include("Albums"), aby wskazać, że chcesz również powiązanych albumów. Spowoduje to bardziej wydajną aplikację, ponieważ pobierze zarówno dane gatunku, jak i albumu w jednym żądaniu bazy danych.

Zadanie 2 . Uruchamianie aplikacji

W tym zadaniu uruchomisz aplikację i pobierzesz albumy określonego gatunku z bazy danych.

  1. Naciśnij klawisz F5 , aby uruchomić aplikację.

  2. Projekt rozpoczyna się na stronie głównej. Zmień adres URL na /Store/Browse?genre=Pop , aby sprawdzić, czy wyniki są pobierane z bazy danych.

    Przeglądanie według gatunku

    Przeglądanie /Store/Browse?genre=Pop

Zadanie 3 . Uzyskiwanie dostępu do albumów według identyfikatora

W tym zadaniu powtórzysz poprzednią procedurę, aby uzyskać albumy według identyfikatora.

  1. W razie potrzeby zamknij przeglądarkę, aby powrócić do programu Visual Studio. Otwórz klasę StoreController , aby zmienić metodę akcji Details . W tym celu w Eksplorator rozwiązań rozwiń folder Controllers i kliknij dwukrotnie plik StoreController.cs.

  2. Zmień metodę akcji Szczegóły , aby pobrać szczegóły albumów na podstawie ich identyfikatora. W tym celu zastąp następujący kod:

    (Fragment kodu — modele i dostęp do danych — Szczegóły Ex3 StoreControllerMethod)

    // GET: /Store/
    public ActionResult Details(int id)
    {
        var album = this.storeDB.Albums.Find(id);
    
        if (album == null)
        {
            return this.HttpNotFound();
        }
    
        return this.View(album);
    }
    

Zadanie 4 . Uruchamianie aplikacji

W tym zadaniu uruchomisz aplikację w przeglądarce internetowej i uzyskasz szczegóły albumu według identyfikatora.

  1. Naciśnij klawisz F5 , aby uruchomić aplikację.

  2. Projekt rozpoczyna się na stronie głównej. Zmień adres URL na /Store/Details/51 lub przeglądaj gatunki i wybierz album, aby sprawdzić, czy wyniki są pobierane z bazy danych.

    Szczegóły przeglądania szczegółów

    Przeglądanie /Store/Details/51

Uwaga

Ponadto tę aplikację można wdrożyć w witrynach sieci Web platformy Windows Azure w dodatku B: Publikowanie aplikacji ASP.NET MVC 4 przy użyciu narzędzia Web Deploy.


Podsumowanie

Wykonując to praktyczne laboratorium, poznaliśmy podstawy ASP.NET modeli MVC i dostępu do danych przy użyciu podejścia Database First , a także podejścia Code First :

  • Jak dodać bazę danych do rozwiązania w celu korzystania z danych
  • Jak zaktualizować kontrolery, aby udostępnić szablony widoku z danymi pobranymi z bazy danych zamiast zakodowanymi na podstawie kodu
  • Jak wykonywać zapytania dotyczące bazy danych przy użyciu parametrów
  • Jak używać kształtowania wyników zapytania, funkcji, która zmniejsza liczbę dostępu do bazy danych, pobierania danych w bardziej wydajny sposób
  • Jak używać metod Database First i Code First w programie Microsoft Entity Framework w celu połączenia bazy danych z modelem

Dodatek A: Instalowanie Visual Studio Express 2012 dla sieci Web

Można zainstalować Microsoft Visual Studio Express 2012 dla sieci Web lub innej wersji "Express" przy użyciu Instalator platformy Microsoft Web. Poniższe instrukcje zawierają instrukcje opisane w krokach wymaganych do zainstalowania programu Visual Studio Express 2012 for Web przy użyciu Instalator platformy Microsoft Web.

  1. Przejdź do strony [https://go.microsoft.com/?linkid=9810169](https://go.microsoft.com/?linkid=9810169). Alternatywnie, jeśli masz już zainstalowany Instalator platformy sieci Web, możesz go otworzyć i wyszukać produkt "Visual Studio Express 2012 for Web with Windows Azure SDK" (Visual Studio Express 2012 for Web with Windows Azure SDK).

  2. Kliknij pozycję Zainstaluj teraz. Jeśli nie masz Instalatora platformy internetowej , nastąpi przekierowanie do pobrania i zainstalowania go najpierw.

  3. Po otwarciu Instalatora platformy internetowej kliknij przycisk Zainstaluj , aby rozpocząć instalację.

    Instalowanie Visual Studio Express

    Instalowanie Visual Studio Express

  4. Przeczytaj wszystkie licencje i postanowienia dotyczące produktów i kliknij przycisk Akceptuję , aby kontynuować.

    Akceptowanie postanowień licencyjnych

    Akceptowanie postanowień licencyjnych

  5. Poczekaj na zakończenie procesu pobierania i instalacji.

    Postęp instalacji

    Postęp instalacji

  6. Po zakończeniu instalacji kliknij przycisk Zakończ.

    Instalacja została ukończona

    Instalacja została ukończona

  7. Kliknij przycisk Zakończ, aby zamknąć Instalatora platformy sieci Web.

  8. Aby otworzyć Visual Studio Express dla sieci Web, przejdź do ekranu startowego i zacznij pisać "VS Express", a następnie kliknij kafelek VS Express for Web.

    Kafelek programu VS Express dla sieci Web

    Kafelek programu VS Express dla sieci Web

Dodatek B: publikowanie aplikacji ASP.NET MVC 4 przy użyciu narzędzia Web Deploy

W tym dodatku pokazano, jak utworzyć nową witrynę internetową z portalu zarządzania platformy Windows Azure i opublikować aplikację uzyskaną przez wykonanie laboratorium, korzystając z funkcji publikowania web deploy udostępnionej przez platformę Windows Azure.

Zadanie 1 . Tworzenie nowej witryny sieci Web w witrynie Azure Portal systemu Windows

  1. Przejdź do portalu zarządzania platformy Windows Azure i zaloguj się przy użyciu poświadczeń firmy Microsoft skojarzonych z subskrypcją.

    Uwaga

    Za pomocą platformy Windows Azure można hostować 10 ASP.NET witryn sieci Web bezpłatnie, a następnie skalować w miarę wzrostu ruchu. Możesz zarejestrować się tutaj.

    Zaloguj się do systemu Windows Azure Portal

    Zaloguj się do portalu zarządzania platformy Windows Azure

  2. Kliknij pozycję Nowy na pasku poleceń.

    Tworzenie nowej witryny sieci Web Tworzenie

    Tworzenie nowej witryny sieci Web

  3. Kliknij pozycję Compute Web Site ( Obliczanie | witryny sieci Web). Następnie wybierz opcję Szybkie tworzenie . Podaj dostępny adres URL nowej witryny sieci Web i kliknij pozycję Utwórz witrynę sieci Web.

    Uwaga

    Witryna sieci Web platformy Windows Azure jest hostem aplikacji internetowej działającej w chmurze, którą można kontrolować i zarządzać nią. Opcja Szybkie tworzenie umożliwia wdrożenie ukończonej aplikacji internetowej w witrynie sieci Web platformy Windows Azure spoza portalu. Nie obejmuje on kroków konfigurowania bazy danych.

    Tworzenie nowej witryny sieci Web przy użyciu szybkiego tworzenia

    Tworzenie nowej witryny sieci Web przy użyciu szybkiego tworzenia

  4. Poczekaj na utworzenie nowej witryny sieci Web .

  5. Po utworzeniu witryny sieci Web kliknij link w kolumnie ADRES URL . Sprawdź, czy nowa witryna sieci Web działa.

    Przechodzenie do nowej witryny sieci Web

    Przechodzenie do nowej witryny sieci Web

    Witryna sieci Web z uruchomioną witryną sieci Web

    Uruchomiona witryna sieci Web

  6. Wstecz do portalu i kliknij nazwę witryny sieci Web w kolumnie Nazwa, aby wyświetlić strony zarządzania.

    Otwieranie stron zarządzania witrynami sieci Web otwieranie stron

    Otwieranie stron zarządzania witrynami sieci Web

  7. Na stronie Pulpit nawigacyjny w sekcji Szybki rzut oka kliknij link Pobierz profil publikowania .

    Uwaga

    Profil publikowania zawiera wszystkie informacje wymagane do opublikowania aplikacji internetowej w witrynie internetowej platformy Windows Azure dla każdej metody publikacji z włączoną obsługą. Profil publikowania zawiera adresy URL, poświadczenia użytkownika i ciągi bazy danych wymagane do nawiązania połączenia z poszczególnymi punktami końcowymi, dla których jest włączona metoda publikacji. Program Microsoft WebMatrix 2, Microsoft Visual Studio Express for Web i Microsoft Visual Studio 2012 obsługują odczytywanie profilów publikowania w celu zautomatyzowania konfiguracji tych programów do publikowania aplikacji internetowych w witrynach internetowych platformy Windows Azure.

    Pobieranie profilu publikowania witryny sieci Web Pobieranie

    Pobieranie profilu publikowania witryny sieci Web

  8. Pobierz plik profilu publikowania do znanej lokalizacji. W tym ćwiczeniu zobaczysz, jak używać tego pliku do publikowania aplikacji internetowej w witrynach sieci Web platformy Windows Azure z poziomu programu Visual Studio.

    Zapisywanie pliku profilu publikowania Zapisywanie

    Zapisywanie pliku profilu publikowania

Zadanie 2 — Konfigurowanie serwera bazy danych

Jeśli aplikacja korzysta z SQL Server baz danych, musisz utworzyć serwer SQL Database. Jeśli chcesz wdrożyć prostą aplikację, która nie korzysta z SQL Server możesz pominąć to zadanie.

  1. Do przechowywania bazy danych aplikacji potrzebny będzie serwer SQL Database. Serwery SQL Database można wyświetlić z subskrypcji w portalu zarządzania platformy Windows Azure napulpicie nawigacyjnym serweraSql Databases | | Server. Jeśli nie masz utworzonego serwera, możesz go utworzyć za pomocą przycisku Dodaj na pasku poleceń. Zanotuj nazwę serwera i adres URL, nazwę logowania administratora i hasło, ponieważ będą one używane w następnych zadaniach. Nie twórz jeszcze bazy danych, ponieważ zostanie ona utworzona w późniejszym etapie.

    pulpit nawigacyjny serwera SQL Database

    pulpit nawigacyjny serwera SQL Database

  2. W następnym zadaniu przetestujesz połączenie bazy danych z programu Visual Studio, dlatego musisz uwzględnić lokalny adres IP na liście dozwolonych adresów IP serwera. Aby to zrobić, kliknij przycisk Konfiguruj, wybierz adres IP z bieżącego adresu IP klienta i wklej go w polach tekstowych Początkowy adres IP i Końcowy adres IP , a następnie kliknij przycisk add-client-ip-address-ok-button .

    Dodawanie adresu IP klienta

    Dodawanie adresu IP klienta

  3. Po dodaniu adresu IP klienta do listy dozwolonych adresów IP kliknij pozycję Zapisz , aby potwierdzić zmiany.

    Potwierdzanie zmian

    Potwierdzanie zmian

Zadanie 3 . Publikowanie aplikacji ASP.NET MVC 4 przy użyciu narzędzia Web Deploy

  1. Wstecz do rozwiązania ASP.NET MVC 4. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt witryny internetowej i wybierz pozycję Publikuj.

    Publikowanie aplikacji

    Publikowanie witryny sieci Web

  2. Zaimportuj profil publikowania zapisany w pierwszym zadaniu.

    Importowanie profilu publikowania Importowanie profilu publikowania

    Importowanie profilu publikowania

  3. Kliknij pozycję Weryfikuj połączenie. Po zakończeniu walidacji kliknij przycisk Dalej.

    Uwaga

    Walidacja zostanie ukończona po wyświetleniu zielonego znacznika wyboru obok przycisku Weryfikuj połączenie.

    Weryfikowanie połączenia

    Weryfikowanie połączenia

  4. Na stronie Ustawienia w sekcji Bazy danych kliknij przycisk obok pola tekstowego połączenia bazy danych (tj. DefaultConnection).

    sieci Web wdrażania w sieci Web wdróż konfigurację sieci WebKonfiguracja

    Konfiguracja wdrażania sieci Web

  5. Skonfiguruj połączenie bazy danych w następujący sposób:

    • W polu Nazwa serwera wpisz adres URL serwera SQL Database przy użyciu prefiksu tcp: .

    • W polu Nazwa użytkownika wpisz nazwę logowania administratora serwera.

    • W polu Hasło wpisz hasło logowania administratora serwera.

    • Wpisz nową nazwę bazy danych.

      Konfigurowanie parametrów połączenia docelowego

      Konfigurowanie parametrów połączenia docelowego

  6. Następnie kliknij przycisk OK. Po wyświetleniu monitu o utworzenie bazy danych kliknij przycisk Tak.

    Tworzenie bazy danych Tworzenie

    Tworzenie bazy danych

  7. Parametry połączenia używane do nawiązywania połączenia z SQL Database na platformie Windows Azure są wyświetlane w polu tekstowym Domyślne połączenie. Następnie kliknij przycisk Dalej.

    Parametry połączenia wskazujące SQL Database

    Parametry połączenia wskazujące SQL Database

  8. Na stronie Podgląd kliknij pozycję Publikuj.

    Publikowanie aplikacji internetowej Publikowanie

    Publikowanie aplikacji internetowej

  9. Po zakończeniu procesu publikowania domyślna przeglądarka otworzy opublikowaną witrynę internetową.

Dodatek C: Używanie fragmentów kodu

W przypadku fragmentów kodu masz cały potrzebny kod w zasięgu ręki. Dokument laboratorium zawiera informacje o tym, kiedy można ich używać, jak pokazano na poniższej ilustracji.

Używanie fragmentów kodu programu Visual Studio do wstawiania kodu do projektu

Wstawianie kodu do projektu przy użyciu fragmentów kodu programu Visual Studio

Aby dodać fragment kodu przy użyciu klawiatury (tylko w języku C#)

  1. Umieść kursor, w którym chcesz wstawić kod.
  2. Zacznij wpisywać nazwę fragmentu kodu (bez spacji lub łączników).
  3. Obejrzyj, jak funkcja IntelliSense wyświetla pasujące nazwy fragmentów kodu.
  4. Wybierz prawidłowy fragment kodu (lub kontynuuj wpisywanie do momentu wybrania nazwy całego fragmentu kodu).
  5. Naciśnij dwukrotnie klawisz Tab, aby wstawić fragment kodu w lokalizacji kursora.

Zacznij wpisywać nazwę fragmentu kodu Rozpocznij

Zacznij wpisywać nazwę fragmentu kodu

Naciśnij klawisz Tab, aby wybrać wyróżniony fragment kodu

Naciśnij klawisz Tab, aby wybrać wyróżniony fragment kodu

Ponownie naciśnij klawisz Tab, a fragment kodu ponownie rozwiń pozycję

Ponownie naciśnij klawisz Tab, a fragment kodu zostanie rozwiń

Aby dodać fragment kodu przy użyciu myszy (C#, Visual Basic i XML) 1. Kliknij prawym przyciskiem myszy miejsce, w którym chcesz wstawić fragment kodu.

  1. Wybierz pozycję Wstaw fragment kodu , a następnie pozycję Moje fragmenty kodu.
  2. Wybierz odpowiedni fragment kodu z listy, klikając go.

Kliknij prawym przyciskiem myszy miejsce, w którym chcesz wstawić fragment kodu, a następnie wybierz polecenie Wstaw fragment kodu

Kliknij prawym przyciskiem myszy miejsce, w którym chcesz wstawić fragment kodu, a następnie wybierz pozycję Wstaw fragment kodu

Wybierz odpowiedni fragment kodu z listy, klikając go

Wybierz odpowiedni fragment kodu z listy, klikając go