Wprowadzenie do podstawowych EF w programie .NET Framework z istniejącej bazy danychGetting started with EF Core on .NET Framework with an Existing Database

W tym przewodniku zostanie utworzona aplikacja konsolowa, która wykonuje dostęp do podstawowych danych w bazie danych programu Microsoft SQL Server przy użyciu programu Entity Framework.In this walkthrough, you will build a console application that performs basic data access against a Microsoft SQL Server database 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 program Visual StudioOpen Visual Studio

  • Plik > Nowy > Projekt...File > New > Project...

  • Z menu po lewej stronie wybierz Szablony > Visual C# > systemu WindowsFrom the left menu select Templates > Visual C# > Windows

  • Wybierz aplikacji konsoli szablonu projektuSelect the Console Application project template

  • Upewnij się, ma być przeznaczona dla .NET Framework 4.5.1 lub nowszyEnsure you are targeting .NET Framework 4.5.1 or later

  • Nadaj nazwę projektu, a następnie kliknij przycisk OKGive the project a name and click 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

Aby włączyć odtwarzania z istniejącej bazy danych należy zbyt zainstalować kilka innych pakietów.To enable reverse engineering from an existing database we need to install a couple of other packages too.

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

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 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

Proces odtwarzania utworzony klas jednostek i pochodne kontekst na podstawie schematu istniejącej bazy danych.The reverse engineer process created entity classes and a derived context 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.ConsoleApp.ExistingDb
{
    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.

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

namespace EFGetStarted.ConsoleApp.ExistingDb
{
    public partial class BloggingContext : DbContext
    {
        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;");
        }

        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);
            });
        }

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

Użyj modeluUse your model

Można teraz używać modelu do uzyskania dostępu do danych.You can now use your 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 EFGetStarted.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 jednego blogu jest zapisywana w bazie danych, a następnie szczegóły wszystkich blogi są podane w konsoli.You will see that one blog is saved to the database and then the details of all blogs are printed to the console.

obraz