Wprowadzenie do programu EF Core programu ASP.NET Core z istniejącej bazy danychGetting Started with EF Core on ASP.NET Core with an Existing Database

W tym samouczku utworzysz aplikację ASP.NET Core MVC, który wykonuje podstawowe dane dostępu przy użyciu platformy Entity Framework Core.In this tutorial, you build an ASP.NET Core MVC application that performs basic data access using Entity Framework Core. Możesz odtwarzać istniejącą bazę danych do tworzenia modelu Entity Framework.You reverse engineer an existing database to create an Entity Framework model.

Wyświetlanie przykładowych w tym artykule w witrynie GitHub.View this article's sample on GitHub.

Wymagania wstępnePrerequisites

Zainstaluj następujące oprogramowanie:Install the following software:

Utwórz bazę danych do obsługi blogówCreate Blogging database

W tym samouczku do obsługi blogów bazy danych w ramach wystąpienia LocalDb jako istniejącej bazy danych.This tutorial uses a Blogging database on your LocalDb instance as the existing database. Jeśli masz już utworzoną do obsługi blogów bazy danych jako część innego samouczek, należy pominąć tę procedurę.If you have already created the Blogging database as part of another tutorial, skip these steps.

  • Otwórz program Visual StudioOpen Visual Studio
  • Narzędzia -> nawiązać połączenie z bazą danych...Tools -> Connect to Database...
  • Wybierz programu Microsoft SQL Server i kliknij przycisk KontynuujSelect Microsoft SQL Server and click Continue
  • Wprowadź (localdb) \mssqllocaldb jako nazwy serweraEnter (localdb)\mssqllocaldb as the Server Name
  • Wprowadź wzorca jako Nazwa bazy danych i kliknij przycisk OKEnter master as the Database Name and click OK
  • Baza danych master jest teraz wyświetlany w obszarze połączeń danych w Eksploratora serweraThe master database is now displayed under Data Connections in Server Explorer
  • Kliknij prawym przyciskiem myszy w bazie danych w Eksploratora serwera i wybierz nowe zapytanieRight-click on the database in Server Explorer and select New Query
  • Skopiuj skrypt w edytorze zapytańCopy the script listed below into the query editor
  • Kliknij prawym przyciskiem myszy w edytorze zapytań, a następnie wybierz pozycję wykonaniaRight-click on the query editor and select Execute
CREATE DATABASE [Blogging];
GO

USE [Blogging];
GO

CREATE TABLE [Blog] (
    [BlogId] int NOT NULL IDENTITY,
    [Url] nvarchar(max) NOT NULL,
    CONSTRAINT [PK_Blog] PRIMARY KEY ([BlogId])
);
GO

CREATE TABLE [Post] (
    [PostId] int NOT NULL IDENTITY,
    [BlogId] int NOT NULL,
    [Content] nvarchar(max),
    [Title] nvarchar(max),
    CONSTRAINT [PK_Post] PRIMARY KEY ([PostId]),
    CONSTRAINT [FK_Post_Blog_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [Blog] ([BlogId]) ON DELETE CASCADE
);
GO

INSERT INTO [Blog] (Url) VALUES
('http://blogs.msdn.com/dotnet'),
('http://blogs.msdn.com/webdev'),
('http://blogs.msdn.com/visualstudio')
GO

Tworzenie nowego projektuCreate a new project

  • Otwórz program Visual Studio 2017Open Visual Studio 2017
  • Plik > Nowy > Projekt...File > New > Project...
  • Z menu po lewej stronie wybierz zainstalowane > Visual C# > sieci WebFrom the left menu select Installed > Visual C# > Web
  • Wybierz aplikacji sieci Web programu ASP.NET Core szablonu projektuSelect the ASP.NET Core Web Application project template
  • Wprowadź EFGetStarted.AspNetCore.ExistingDb jako nazwę i kliknij przycisk OKEnter EFGetStarted.AspNetCore.ExistingDb as the name and click OK
  • Poczekaj, aż Nowa aplikacja internetowa ASP.NET Core wyświetlać okno dialogoweWait for the New ASP.NET Core Web Application dialog to appear
  • Upewnij się, że menu rozwijanego platform docelowych jest ustawiona na platformy .NET Core, a lista rozwijana wersji jest ustawiona na platformy ASP.NET Core 2.1Make sure that the target framework dropdown is set to .NET Core, and the version dropdown is set to ASP.NET Core 2.1
  • Wybierz aplikacji sieci Web (Model-View-Controller) szablonuSelect the Web Application (Model-View-Controller) template
  • Upewnij się, że uwierzytelniania ustawiono bez uwierzytelnianiaEnsure that Authentication is set to No Authentication
  • Kliknij przycisk OKClick OK

Instalowanie platformy Entity Framework CoreInstall Entity Framework Core

Aby zainstalować programu EF Core, należy zainstalować pakiet dla dostawców bazy danych programu EF Core, który ma pod kątem.To install EF Core, you install the package for the EF Core database provider(s) you want to target. Aby uzyskać listę dostępnych dostawców zobacz dostawcy baz danych.For a list of available providers see Database Providers.

Na potrzeby tego samouczka nie trzeba zainstalować pakiet dostawcy, ponieważ w tym samouczku użyto programu SQL Server.For this tutorial, you don't have to install a provider package because the tutorial uses SQL Server. Pakiet dostawcy programu SQL Server znajduje się w meta Microsoft.aspnetcore.all Microsoft.AspnetCore.App.The SQL Server provider package is included in the Microsoft.AspnetCore.App metapackage.

Model odtworzyć.Reverse engineer your model

Teraz nadszedł czas na tworzenie modelu platformy EF, w oparciu o istniejącą bazę danych.Now it's time to create the EF model based on your existing database.

  • Narzędzia -> pakietu NuGet Manager -> Konsola Menedżera pakietówTools –> NuGet Package Manager –> Package Manager Console
  • Uruchom następujące polecenie, aby utworzyć model z istniejącej bazy danych:Run the following command to create a model from the existing database:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

Jeśli zostanie wyświetlony błąd wskazujący The term 'Scaffold-DbContext' is not recognized as the name of a cmdlet, a następnie zamknij i otwórz ponownie program Visual Studio.If you receive an error stating The term 'Scaffold-DbContext' is not recognized as the name of a cmdlet, then close and reopen Visual Studio.

Porada

Można określić tabel, które mają zostać wygenerowane jednostki dla, dodając -Tables argument polecenia powyżej.You can specify which tables you want to generate entities for by adding the -Tables argument to the command above. Na przykład -Tables Blog,Post.For example, -Tables Blog,Post.

Proces odtwarzania utworzony klas jednostek (Blog.cs & Post.cs) i pochodnej kontekstu (BloggingContext.cs) na podstawie schematu istniejącej bazy danych.The reverse engineer process created entity classes (Blog.cs & Post.cs) and a derived context (BloggingContext.cs) based on the schema of the existing database.

Klasy jednostki są proste obiekty języka C#, które reprezentują będziesz zapytań i zapisywanie danych.The entity classes are simple C# objects that represent the data you will be querying and saving. Poniżej przedstawiono Blog i Post klas jednostek:Here are the Blog and Post entity classes:

using System;
using System.Collections.Generic;

namespace EFGetStarted.AspNetCore.ExistingDb.Models
{
    public partial class Blog
    {
        public Blog()
        {
            Post = new HashSet<Post>();
        }

        public int BlogId { get; set; }
        public string Url { get; set; }

        public ICollection<Post> Post { get; set; }
    }
}
using System;
using System.Collections.Generic;

namespace EFGetStarted.AspNetCore.ExistingDb.Models
{
    public partial class Post
    {
        public int PostId { get; set; }
        public int BlogId { get; set; }
        public string Content { get; set; }
        public string Title { get; set; }

        public Blog Blog { get; set; }
    }
}

Porada

Aby włączyć ładowanie z opóźnieniem, należy wybrać właściwości nawigacji virtual (Blog.Post i Post.Blog).To enable lazy loading, you can make navigation properties virtual (Blog.Post and Post.Blog).

Kontekst reprezentuje sesję z bazą danych i umożliwia zapytania i Zapisz wystąpień klas jednostek.The context represents a session with the database and allows you to query and save instances of the entity classes.

public partial class BloggingContext : DbContext
{
   public BloggingContext()
   {
   }

   public BloggingContext(DbContextOptions<BloggingContext> options)
       : base(options)
   {
   }

   public virtual DbSet<Blog> Blog { get; set; }
   public virtual DbSet<Post> Post { get; set; }

   protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
   {
       if (!optionsBuilder.IsConfigured)
       {
           #warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
           optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;");
       }
   }

   protected override void OnModelCreating(ModelBuilder modelBuilder)
   {
       modelBuilder.Entity<Blog>(entity =>
       {
           entity.Property(e => e.Url).IsRequired();
       });

       modelBuilder.Entity<Post>(entity =>
       {
           entity.HasOne(d => d.Blog)
               .WithMany(p => p.Post)
               .HasForeignKey(d => d.BlogId);
       });
   }
}

Zarejestrowanie kontekst wstrzykiwanie zależnościRegister your context with dependency injection

Pojęcie wstrzykiwanie zależności stanowi podstawę do platformy ASP.NET Core.The concept of dependency injection is central to ASP.NET Core. Usługi (takie jak BloggingContext) zostały zarejestrowane przy użyciu iniekcji zależności podczas uruchamiania aplikacji.Services (such as BloggingContext) are registered with dependency injection during application startup. Składniki, które wymagają tych usług, (na przykład kontrolerach MVC) znajdują się następnie tych usług za pomocą właściwości lub parametry konstruktora.Components that require these services (such as your MVC controllers) are then provided these services via constructor parameters or properties. Aby uzyskać więcej informacji na temat wstrzykiwanie zależności zobacz wstrzykiwanie zależności artykuł w witrynie programu ASP.NET.For more information on dependency injection see the Dependency Injection article on the ASP.NET site.

Rejestrowanie i konfigurowanie kontekstu w pliku Startup.csRegister and configure your context in Startup.cs

Zapewnienie BloggingContext dostępne dla kontrolerów MVC, zarejestruj go jako usługę.To make BloggingContext available to MVC controllers, register it as a service.

  • Otwórz Startup.csOpen Startup.cs
  • Dodaj następujący kod using instrukcji na początku plikuAdd the following using statements at the start of the file
using EFGetStarted.AspNetCore.ExistingDb.Models;
using Microsoft.EntityFrameworkCore;

Teraz możesz używać AddDbContext(...) metodę, aby zarejestrować go jako usługę.Now you can use the AddDbContext(...) method to register it as a service.

  • Znajdź ConfigureServices(...) — metodaLocate the ConfigureServices(...) method
  • Dodaj następujący wyróżniony kod, aby zarejestrować kontekst jako usługaAdd the following highlighted code to register the context as a service
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });


    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

    var connection = @"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;ConnectRetryCount=0";
    services.AddDbContext<BloggingContext>(options => options.UseSqlServer(connection));
}

Porada

W rzeczywistej aplikacji zwykle przełączyć parametry połączenia w zmiennej środowisku lub pliku konfiguracji.In a real application you would typically put the connection string in a configuration file or environment variable. W tym samouczku dla uproszczenia, ma możesz zdefiniować go w kodzie.For the sake of simplicity, this tutorial has you define it in code. Aby uzyskać więcej informacji, zobacz parametry połączenia.For more information, see Connection Strings.

Tworzenie kontrolera i widokiCreate a controller and views

  • Kliknij prawym przyciskiem myszy kontrolerów folderu w Eksploratora rozwiązań i wybierz Dodaj -> kontrolera...Right-click on the Controllers folder in Solution Explorer and select Add -> Controller...
  • Wybierz kontroler MVC z widokami używający narzędzia Entity Framework i kliknij przycisk OkSelect MVC Controller with views, using Entity Framework and click Ok
  • Ustaw klasa modelu do Blog i klasa kontekstu danych do BloggingContextSet Model class to Blog and Data context class to BloggingContext
  • Kliknij przycisk DodajClick Add

Uruchamianie aplikacjiRun the application

Teraz można uruchomić aplikacji, aby zobaczyć go w działaniu.You can now run the application to see it in action.

  • Debuguj -> Start bez debugowaniaDebug -> Start Without Debugging

  • Aplikacja zostanie skompilowana i zostanie otwarta w przeglądarce sieci webThe application builds and opens in a web browser

  • Przejdź do /BlogsNavigate to /Blogs

  • Kliknij przycisk Utwórz nowąClick Create New

  • Wprowadź adresu Url nowego bloga, a następnie kliknij przycisk CreateEnter a Url for the new blog and click Create

    Tworzenie strony

    Strona indeksu