Code First do istniejącej bazy danych

Ten film wideo i przewodnik krok po kroku zawierają wprowadzenie do tworzenia Code First przeznaczonych dla istniejącej bazy danych. Code First umożliwia definiowanie modelu przy użyciu języka C# lub VB.Net klas. Opcjonalnie dodatkową konfigurację można wykonać przy użyciu atrybutów klas i właściwości lub przy użyciu fluent interfejsu API.

Obejrzyj film

Ten film wideo jest teraz dostępny w 9 kanale Channel.

Wymagania wstępne

Do ukończenia tego przewodnika Visual Studio 2012lub Visual Studio 2013 musi być zainstalowany program .

Musisz również mieć zainstalowaną wersję 6.1(lub nowszą) Entity Framework Tools do Visual Studio programu . Zobacz get Entity Framework uzyskać informacje na temat instalowania najnowszej wersji Entity Framework Tools.

1. Tworzenie istniejącej bazy danych

Zazwyczaj w przypadku określania istniejącej bazy danych jako docelowej zostanie ona już utworzona, ale w tym przewodniku musimy utworzyć bazę danych, aby uzyskać do nich dostęp.

Wygenerujmy bazę danych.

  • Otwórz program Visual Studio.

  • Widok — Eksplorator serwera

  • Kliknij prawym przyciskiem myszy pozycję Połączenia danych — Dodaj połączenie...

  • Jeśli nie nałączono połączenia z bazą danych z Eksplorator serwera, musisz wybrać Microsoft SQL Server jako źródło danych

    Select Data Source

  • Połączenie do wystąpienia bazy danych LocalDB, a następnie wprowadź Tekst jako nazwę bazy danych

    LocalDB Connection

  • Wybierz przycisk OK. Zostanie pytanie, czy chcesz utworzyć nową bazę danych. Wybierz pozycję Tak

    Create Database Dialog

  • Nowa baza danych będzie teraz wyświetlana w Eksplorator serwera, kliknij ją prawym przyciskiem myszy i wybierz pozycję Nowe zapytanie

  • Skopiuj następujące SQL do nowego zapytania, a następnie kliknij prawym przyciskiem myszy zapytanie i wybierz polecenie Wykonaj

CREATE TABLE [dbo].[Blogs] (
    [BlogId] INT IDENTITY (1, 1) NOT NULL,
    [Name] NVARCHAR (200) NULL,
    [Url]  NVARCHAR (200) NULL,
    CONSTRAINT [PK_dbo.Blogs] PRIMARY KEY CLUSTERED ([BlogId] ASC)
);

CREATE TABLE [dbo].[Posts] (
    [PostId] INT IDENTITY (1, 1) NOT NULL,
    [Title] NVARCHAR (200) NULL,
    [Content] NTEXT NULL,
    [BlogId] INT NOT NULL,
    CONSTRAINT [PK_dbo.Posts] PRIMARY KEY CLUSTERED ([PostId] ASC),
    CONSTRAINT [FK_dbo.Posts_dbo.Blogs_BlogId] FOREIGN KEY ([BlogId]) REFERENCES [dbo].[Blogs] ([BlogId]) ON DELETE CASCADE
);

INSERT INTO [dbo].[Blogs] ([Name],[Url])
VALUES ('The Visual Studio Blog', 'http://blogs.msdn.com/visualstudio/')

INSERT INTO [dbo].[Blogs] ([Name],[Url])
VALUES ('.NET Framework Blog', 'http://blogs.msdn.com/dotnet/')

2. Tworzenie aplikacji

Aby zachować prostotę, skompilowana zostanie podstawowa aplikacja konsolowa, która Code First do uzyskiwania dostępu do danych:

  • Otwórz program Visual Studio.
  • Plik — nowy > — Project...
  • Wybierz Windows z menu po lewej stronie i pozycję Aplikacja konsolowa
  • Wprowadź CodeFirstExistingDatabaseSample jako nazwę
  • Wybierz przycisk OK.

 

3. Model inżyniera odwrotnego

Użyjemy kodu Entity Framework Tools dla Visual Studio, aby pomóc nam wygenerować początkowy kod do mapowania na bazę danych. Te narzędzia generują po prostu kod, który można również wpisać ręcznie, jeśli wolisz.

  • Project — Dodaj nowy element...

  • Wybierz pozycję Dane z menu po lewej stronie, a następnie wybierz ADO.NET Entity Data Model

  • Wprowadź TekstKontekst jako nazwę, a następnie kliknij przycisk OK

  • W ten sposób zostanie Entity Data Model kreatora instalacji

  • Wybierz Code First z bazy danych i kliknij przycisk Dalej

    Wizard One CFE

  • Wybierz połączenie z bazą danych utworzoną w pierwszej sekcji, a następnie kliknij przycisk Dalej.

    Wizard Two CFE

  • Kliknij pole wyboru obok pola Tabele, aby zaimportować wszystkie tabele, a następnie kliknij przycisk Zakończ.

    Wizard Three CFE

Po zakończeniu procesu inżyniera odwrotnego do projektu zostanie dodanych kilka elementów, przyjrzyjmy się temu, co zostało dodane.

Plik konfiguracji

Plik App.config został dodany do projektu. Ten plik zawiera ciąg połączenia z istniejącą bazą danych.

<connectionStrings>
  <add  
    name="BloggingContext"  
    connectionString="data source=(localdb)\mssqllocaldb;initial catalog=Blogging;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"  
    providerName="System.Data.SqlClient" />
</connectionStrings>

Zauważysz również inne ustawienia w pliku konfiguracji. Są to domyślne ustawienia platformy EF, które informują o Code First, gdzie tworzyć bazy danych. Ponieważ mapowanie jest mapowane na istniejącą bazę danych, to ustawienie zostanie zignorowane w naszej aplikacji.

Kontekst pochodny

Do projektu dodano klasę ToTContext. Kontekst reprezentuje sesję z bazą danych, umożliwiając nam wykonywanie zapytań i zapisywanie danych. Kontekst uwidacznia dbset TEntity > dla każdego typu w naszym modelu. Zauważysz również, że konstruktor domyślny wywołuje konstruktor podstawowy przy użyciu składni name=. Dzięki temu Code First, że ciąg połączenia do użycia w tym kontekście powinien zostać załadowany z pliku konfiguracji.

public partial class BloggingContext : DbContext
    {
        public BloggingContext()
            : base("name=BloggingContext")
        {
        }

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

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
        }
    }

Podczas używania parametrów połączenia w pliku konfiguracji należy zawsze używać składni name=. Dzięki temu, jeśli nie ma parametrów połączenia, program Entity Framework, a nie tworzy nową bazę danych.

Klasy modelu

Na koniec do projektu zostały również dodane klasy Blog i Post. Są to klasy domen, które obejmują nasz model. Zobaczysz adnotacje danych zastosowane do klas, aby określić konfigurację, w której konwencje Code First nie będą zgodne ze strukturą istniejącej bazy danych. Na przykład zobaczysz adnotację StringLength w adresach Blog.Name i Blog.Url, ponieważ mają one maksymalną długość 200 w bazie danych (wartość domyślna to Code First użycie maksymalnej długości obsługiwanej przez dostawcę bazy danych — nvarchar(max) w programie SQL Server).

public partial class Blog
{
    public Blog()
    {
        Posts = new HashSet<Post>();
    }

    public int BlogId { get; set; }

    [StringLength(200)]
    public string Name { get; set; }

    [StringLength(200)]
    public string Url { get; set; }

    public virtual ICollection<Post> Posts { get; set; }
}

4. Odczytywanie & danych

Teraz, gdy mamy już model, na razie należy go użyć do uzyskania dostępu do niektórych danych. Zaim implementuj metodę Main w programie Program.cs, jak pokazano poniżej. Ten kod tworzy nowe wystąpienie naszego kontekstu, a następnie używa go do wstawienia nowego bloga. Następnie używa zapytania LINQ, aby pobrać wszystkie blogi z bazy danych uporządkowane alfabetycznie według tytułu.

class Program
{
    static void Main(string[] args)
    {
        using (var db = new BloggingContext())
        {
            // Create and save a new Blog
            Console.Write("Enter a name for a new Blog: ");
            var name = Console.ReadLine();

            var blog = new Blog { Name = name };
            db.Blogs.Add(blog);
            db.SaveChanges();

            // Display all Blogs from the database
            var query = from b in db.Blogs
                        orderby b.Name
                        select b;

            Console.WriteLine("All blogs in the database:");
            foreach (var item in query)
            {
                Console.WriteLine(item.Name);
            }

            Console.WriteLine("Press any key to exit...");
            Console.ReadKey();
        }
    }
}

Teraz możesz uruchomić aplikację i przetestować ją.

Enter a name for a new Blog: ADO.NET Blog
All blogs in the database:
.NET Framework Blog
ADO.NET Blog
The Visual Studio Blog
Press any key to exit...

 

Co zrobić, jeśli baza danych się zmieni?

Kreator Code First z bazą danych jest przeznaczony do generowania zestawu punktów początkowych klas, które można następnie dostosować i zmodyfikować. Jeśli schemat bazy danych zmieni się, możesz ręcznie edytować klasy lub wykonać innego inżyniera odwrotnego w celu zastąpienia klas.

Używanie Migracje Code First do istniejącej bazy danych

Jeśli chcesz używać Migracje Code First z istniejącą bazą danych, zobacz Migracje Code First do istniejącej bazy danych.

Podsumowanie

W tym przewodniku przyjrzeliśmy się Code First przy użyciu istniejącej bazy danych. Umyliśmy Entity Framework Tools dla Visual Studio do odwracania zestawu klas, które zostały zamapowane na bazę danych i mogą być używane do przechowywania i pobierania danych.