Wprowadzenie do programu EF Core w programie .NET Framework przy użyciu istniejącej bazy danychGetting started with EF Core on .NET Framework with an Existing Database

W tym samouczku utworzysz aplikację konsolową, która wykonuje dostęp do podstawowych danych względem bazy danych programu Microsoft SQL Server przy użyciu platformy Entity Framework.In this tutorial, you build a console application that performs basic data access against a Microsoft SQL Server database using Entity Framework. Aby utworzyć model Entity Framework odtwarzanie istniejącej bazy danych.You create an Entity Framework model by reverse engineering an existing database.

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

Wymagania wstępnePrerequisites

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

W tym samouczku do obsługi blogów bazy danych w wystąpieniu LocalDb jako istniejącej bazy danych.This tutorial uses a Blogging database on the 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# > Windows DesktopFrom the left menu select Installed > Visual C# > Windows Desktop

  • Wybierz Aplikacja konsoli (.NET Framework) szablonu projektuSelect the Console App (.NET Framework) project template

  • Upewnij się, że projekt jest ukierunkowany platformy .NET Framework 4.6.1 lub nowszejMake sure that the project targets .NET Framework 4.6.1 or later

  • Nadaj projektowi nazwę ConsoleApp.ExistingDb i kliknij przycisk OKName the project ConsoleApp.ExistingDb and click OK

Instalowanie programu Entity FrameworkInstall Entity Framework

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

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

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

W następnym kroku użyjesz niektórych narzędzi Entity Framework Tools do odtworzenia bazy danych.In the next step, you use some Entity Framework Tools to reverse engineer the database. Więc Zainstaluj również pakiet narzędzi.So install the tools package as well.

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

Odtwarzanie modeluReverse engineer the 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 an 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 danychRun the following command to create a model from the existing database

    Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer
    

Porada

Można określić tabel w celu wygenerowania jednostki dla, dodając -Tables argument polecenia powyżej.You can specify the tables 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 i Post) i pochodnej kontekstu (BloggingContext) na podstawie schematu istniejącej bazy danych.The reverse engineer process created entity classes (Blog and Post) and a derived context (BloggingContext) 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 ConsoleApp.ExistingDb
{
    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 ConsoleApp.ExistingDb
{
    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.The context represents a session with the database. Zawiera metody, które służy do wykonywania zapytań i Zapisz wystąpień klas jednostek.It has methods that you can use to query and save instances of the entity classes.

using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;

namespace ConsoleApp.ExistingDb
{
    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);
            });
        }
    }
}

Użyj modeluUse the model

Można teraz używać modelu przeprowadzić dostępu do danych.You can now use the model to perform data access.

  • Otwórz Program.csOpen Program.cs

  • Zastąp zawartość pliku następującym kodemReplace the contents of the file with the following code

    using System;
    
    namespace ConsoleApp.ExistingDb
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (var db = new BloggingContext())
                {
                    db.Blog.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
                    var count = db.SaveChanges();
                    Console.WriteLine("{0} records saved to database", count);
    
                    Console.WriteLine();
                    Console.WriteLine("All blogs in database:");
                    foreach (var blog in db.Blog)
                    {
                        Console.WriteLine(" - {0}", blog.Url);
                    }
                }
            }
        }
    }
    
  • Debuguj > Uruchom bez debugowaniaDebug > Start Without Debugging

    Zobaczysz, że blogami jest zapisywany w bazie danych, a następnie szczegółowe informacje o wszystkich blogów są drukowane w konsoli.You see that one blog is saved to the database and then the details of all blogs are printed to the console.

    obraz

Następne krokiNext steps

Aby uzyskać więcej informacji na temat sposobu tworzenia szkieletu klasy kontekstu i jednostek, zobacz następujące artykuły:For more information about how to scaffold a context and entity classes, see the following articles: