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

Ważne

.NET Core SDK nie obsługuje już project.json lub programu Visual Studio 2015.The .NET Core SDK no longer supports project.json or Visual Studio 2015. Wszyscy podczas programowania .NET Core jest zaleca się migracji z project.json do csproj i programu Visual Studio 2017.Everyone doing .NET Core development is encouraged to migrate from project.json to csproj and Visual Studio 2017.

W tym przykładzie utworzysz aplikacji platformy ASP.NET Core MVC, który wykonuje dostęp do podstawowych danych przy użyciu programu Entity Framework.In this walkthrough, you will build an ASP.NET Core MVC application that performs basic data access using Entity Framework. Odtwarzanie użyje do utworzenia modelu programu Entity Framework, na podstawie istniejącej bazy danych.You will use reverse engineering to create an Entity Framework model based on an existing database.

Porada

Można wyświetlić w tym artykule próbki w witrynie GitHub.You can view this article's sample on GitHub.

Wstępnie wymagane składnikiPrerequisites

Do przeprowadzenia tego instruktażu potrzebne są następujące wymagania wstępne:The following prerequisites are needed to complete this walkthrough:

Blog bazy danychBlogging database

W tym samouczku używana obsługi blogów bazy danych w wystąpieniu bazy danych LocalDb jako istniejącej bazy danych.This tutorial uses a Blogging database on your LocalDb instance as the existing database.

Porada

Jeśli utworzono już obsługi blogów bazy danych jako część innego samouczek, można pominąć te kroki.If you have already created the Blogging database as part of another tutorial, you can skip these steps.

  • Otwórz program Visual StudioOpen Visual Studio
  • Narzędzia -> łączenia 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 nazwa 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łączenia 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 nowej kwerendyRight-click on the database in Server Explorer and select New Query
  • Skopiuj skrypt wymienione poniżej do edytora zapytańCopy the script, listed below, into the query editor
  • Kliknij prawym przyciskiem myszy w edytorze zapytań i wybierz ExecuteRight-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 2017 Visual StudioOpen Visual Studio 2017
  • Plik -> Nowy -> Projekt...File -> New -> Project...
  • Wybierz z menu po lewej stronie zainstalowana -> Szablony -> Visual C# -> Sieć WebFrom the left menu select Installed -> Templates -> Visual C# -> Web
  • Wybierz aplikacji sieci Web platformy ASP.NET Core (.NET Core) szablonu projektuSelect the ASP.NET Core Web Application (.NET Core) project template
  • Wprowadź EFGetStarted.AspNetCore.ExistingDb jako nazwy i kliknij przycisk OKEnter EFGetStarted.AspNetCore.ExistingDb as the name and click OK
  • Poczekaj, aż nową aplikację sieci Web Core ASP.NET wyświetlać okno dialogoweWait for the New ASP.NET Core Web Application dialog to appear
  • W obszarze ASP.NET Core szablony 2.0 wybierz aplikacji sieci Web (Model-View-Controller)Under ASP.NET Core Templates 2.0 select the Web Application (Model-View-Controller)
  • Upewnij się, że uwierzytelniania ustawiono bez uwierzytelnianiaEnsure that Authentication is set to No Authentication
  • Kliknij przycisk OKClick OK

Instalowanie programu Entity FrameworkInstall Entity Framework

Aby użyć EF podstawowe, należy zainstalować pakiet dla powszechne bazy danych, który ma być docelowa.To use EF Core, install the package for the database provider(s) you want to target. W tym przewodniku zastosowano programu SQL Server.This walkthrough uses SQL Server. Lista dostępnych dostawców dostawcy bazy danych.For a list of available providers see Database Providers.

  • Narzędzia > Menedżera pakietów NuGet > konsoli Menedżera pakietówTools > NuGet Package Manager > Package Manager Console

  • UruchomInstall-Package Microsoft.EntityFrameworkCore.SqlServerRun Install-Package Microsoft.EntityFrameworkCore.SqlServer

Użyjemy niektóre Entity Framework narzędzia do tworzenia modeli z bazy danych.We will be using some Entity Framework Tools to create a model from the database. Dlatego zostanie zainstalowany pakiet narzędzi również:So we will install the tools package as well:

  • UruchomInstall-Package Microsoft.EntityFrameworkCore.ToolsRun Install-Package Microsoft.EntityFrameworkCore.Tools

Użyjemy niektóre platformy ASP.NET Core szkieletów narzędzia do tworzenia widoków i kontrolerów później.We will be using some ASP.NET Core Scaffolding tools to create controllers and views later on. Dlatego zostanie zainstalowany ten pakiet projektu:So we will install this design package as well:

  • UruchomInstall-Package Microsoft.VisualStudio.Web.CodeGeneration.DesignRun Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design

Odtworzyć modeluReverse engineer your model

Teraz nadszedł czas, aby utworzyć model EF na podstawie istniejącej bazy danych.Now it's time to create the EF model based on your existing database.

  • Pakiet NuGet –> Narzędzia Menedżera –> 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 informujący o 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 przez dodanie jednostek dla -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. Np.E.g. -Tables Blog,Post.-Tables Blog,Post.

Proces odtwarzania tworzony klas jednostek (Blog.cs & Post.cs) i kontekst pochodnych (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.

Klas jednostek to proste C# obiekty reprezentujące dane można będzie kwerend i zapisywanie.The entity classes are simple C# objects that represent the data you will be querying and saving.

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 virtual ICollection<Post> Post { get; set; }
    }
}

Kontekst reprezentuje sesji z bazą danych i służy do wykonywania zapytań i zapisać 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 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);
       });
   }
}

Zarejestruj kontekst iniekcji zależnościRegister your context with dependency injection

Pojęcie iniekcji zależności jest podstawą do platformy ASP.NET Core.The concept of dependency injection is central to ASP.NET Core. Usługi (takie jak BloggingContext) są zarejestrowane w usłudze 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 (takich jak kontrolerów MVC) są następnie udostępniane tych usług za pomocą konstruktora parametry lub właściwości.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 iniekcji zależności zobacz iniekcji zależności artykuł w witrynie platformy ASP.NET.For more information on dependency injection see the Dependency Injection article on the ASP.NET site.

Usuń konfigurację kontekstu wbudowanyRemove inline context configuration

W ASP.NET Core konfiguracji jest zazwyczaj wykonywane w Startup.cs.In ASP.NET Core, configuration is generally performed in Startup.cs. Z tego wzorca, możemy przenieść konfiguracji dostawcy bazy danych do Startup.cs.To conform to this pattern, we will move configuration of the database provider to Startup.cs.

  • OtwórzModels\BloggingContext.csOpen Models\BloggingContext.cs
  • Usuń OnConfiguring(...) — metodaDelete the OnConfiguring(...) method
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    #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;");
}
  • Dodaj następujący Konstruktor, co pozwoli konfigurację do przekazania do kontekstu przez iniekcji zależnościAdd the following constructor, which will allow configuration to be passed into the context by dependency injection
public BloggingContext(DbContextOptions<BloggingContext> options)
    : base(options)
{ }

Zarejestruj i skonfiguruj kontekst w pliku Startup.csRegister and configure your context in Startup.cs

Aby naszych kontrolerów MVC korzystać z BloggingContext zamierzamy, aby zarejestrować go jako usługa.In order for our MVC controllers to make use of BloggingContext we are going to register it as a service.

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

Teraz możemy użyć AddDbContext(...) metody, aby zarejestrować go jako usługa.Now we can use the AddDbContext(...) method to register it as a service.

  • Zlokalizuj ConfigureServices(...) — metodaLocate the ConfigureServices(...) method
  • Dodaj następujący kod, aby zarejestrować kontekstu w trybie usługiAdd the following 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.AddMvc();

    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 pliku konfiguracji.In a real application you would typically put the connection string in a configuration file. Dla uproszczenia możemy są definiowane w kodzie.For the sake of simplicity, we are defining it in code. Aby uzyskać więcej informacji, zobacz parametry połączenia.For more information, see Connection Strings.

Tworzenie kontroleraCreate a controller

Następnie firma Microsoft będzie aktywują szkielet w naszym projektu.Next, we'll enable scaffolding in our project.

  • Kliknij prawym przyciskiem myszy kontrolerów folderu w Eksploratora rozwiązań i wybierz kontrolera -> Dodaj...Right-click on the Controllers folder in Solution Explorer and select Add -> Controller...
  • Wybierz pełne zależności i kliknij przycisk DodajSelect Full Dependencies and click Add
  • Możesz zignorować instrukcje ScaffoldingReadMe.txt pliku, który zostanie otwartyYou can ignore the instructions in the ScaffoldingReadMe.txt file that opens

Teraz, gdy jest włączona funkcja szkieletów, możemy utworzyć szkielet kontrolera dla Blog jednostki.Now that scaffolding is enabled, we can scaffold a controller for the Blog entity.

  • Kliknij prawym przyciskiem myszy kontrolerów folderu w Eksploratora rozwiązań i wybierz kontrolera -> Dodaj...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

Można teraz uruchomić aplikację, aby zobaczyć ją w akcji.You can now run the application to see it in action.

  • Debugowanie -> Start bez debugowaniaDebug -> Start Without Debugging
  • Aplikacja kompilacji i Otwórz w przeglądarce sieci webThe application will build and open in a web browser
  • Przejdź do/BlogsNavigate to /Blogs
  • Kliknij przycisk Utwórz nowąClick Create New
  • Wprowadź adres Url nowy blog i kliknij UtwórzEnter a Url for the new blog and click Create

obraz

obraz