Код сначала в существующую базу данных

В этом пошаговом руководстве представлено введение в разработку Code First, предназначенную для существующей базы данных. Code First позволяет определить модель с помощью C# или VB.Net классов. При необходимости можно выполнить дополнительную настройку с помощью атрибутов в классах и свойствах или с помощью свободного API.

Предварительные требования

Для выполнения этого пошагового руководства необходимо установить Visual Studio 2012 или Visual Studio 2013 .

Вам также потребуется версия 6.1 (или более поздняя) установленных средств Entity Framework для Visual Studio . Сведения об установке последней версии средств Entity Framework см. в статье Get Entity Framework Framework .

1. Создание существующей базы данных

Обычно при выборе существующей базы данных она уже будет создана, но для этого пошагового руководства необходимо создать базу данных для доступа.

Давайте пойдем вперед и создадим базу данных.

  • Запустите Visual Studio

  • Представление —> Обозреватель сервера

  • Щелкните правой кнопкой мыши данные Подключение ions—> добавьте Подключение ion...

  • Если вы не подключились к базе данных из сервера Обозреватель, прежде чем выбрать Microsoft SQL Server в качестве источника данных

    Select Data Source

  • Подключение в экземпляр LocalDB и введите Блоги в качестве имени базы данных

    LocalDB Connection

  • Нажмите кнопку "ОК ", и вам будет предложено создать новую базу данных, нажмите кнопку "Да"

    Create Database Dialog

  • Новая база данных появится на сервере Обозреватель, щелкните его правой кнопкой мыши и выберите новый запрос

  • Скопируйте следующий SQL в новый запрос, а затем щелкните правой кнопкой мыши запрос и выберите "Выполнить".

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. Создание приложения

Чтобы упростить работу, мы создадим базовое консольное приложение, использующее Code First для доступа к данным:

  • Запустите Visual Studio
  • Файл — > Создать — > Проект
  • Выберите Windows в меню слева и консольное приложение
  • Введите CodeFirstExistingDatabaseSample в качестве имени
  • Выберите ОК

 

3. Модель обратного инженера

Мы будем использовать инструменты Entity Framework для Visual Studio, чтобы помочь нам создать исходный код для сопоставления с базой данных. Эти средства просто создают код, который можно также ввести вручную, если вы предпочитаете.

  • Проект —> добавление нового элемента...

  • Выберите данные из меню слева, а затем ADO.NET модель данных сущности

  • Введите bloggingContext в качестве имени и нажмите кнопку "ОК"

  • Откроется мастер модели данных сущностей

  • Выберите код сначала из базы данных и нажмите кнопку "Далее"

    Wizard One CFE

  • Выберите подключение к базе данных, созданной в первом разделе, и нажмите кнопку "Далее".

    Wizard Two CFE

  • Щелкните элемент проверка box рядом с таблицами, чтобы импортировать все таблицы и нажмите кнопку "Готово"

    Wizard Three CFE

После завершения процесса обратного инженера в проект будет добавлено несколько элементов, давайте рассмотрим, что было добавлено.

Файл конфигурации

Файл App.config был добавлен в проект, этот файл содержит строка подключения в существующую базу данных.

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

Вы заметите, что некоторые другие параметры в файле конфигурации также являются параметрами EF по умолчанию, которые сообщают Code First where to create database. Так как мы сопоставляем существующую базу данных, эти параметры будут игнорироваться в нашем приложении.

Производный контекст

В проект добавлен класс BloggingContext . Контекст представляет сеанс с базой данных, позволяя запрашивать и сохранять данные. Контекст предоставляет DbSet<TEntity> для каждого типа в нашей модели. Вы также заметите, что конструктор по умолчанию вызывает базовый конструктор с помощью синтаксиса name= . Это сообщает code First, что строка подключения использовать для этого контекста должны быть загружены из файла конфигурации.

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

При использовании строка подключения в файле конфигурации всегда следует использовать синтаксис name= . Это гарантирует, что если строка подключения отсутствует, Entity Framework будет создавать новую базу данных по соглашению.

Классы модели

Наконец, в проект также добавлен класс Blog и Post . Это классы домена, составляющие нашу модель. Вы увидите, что заметки к данным применяются к классам, чтобы указать конфигурацию, в которой соглашения Code First не соответствуют структуре существующей базы данных. Например, вы увидите заметку StringLength на Blog.Name и Blog.Url, так как у них максимальная длина 200 в базе данных (по умолчанию code First используется максимальная длина, поддерживаемая поставщиком базы данных — nvarchar(max) в 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. Чтение и запись данных

Теперь, когда у нас есть модель, пришло время использовать ее для доступа к некоторым данным. Реализуйте метод Main в Program.cs, как показано ниже. Этот код создает новый экземпляр нашего контекста, а затем использует его для вставки нового блога. Затем он использует запрос LINQ для получения всех блогов из базы данных, упорядоченной по алфавиту по названию.

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

Теперь вы можете запустить приложение и протестировать его.

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

 

Что делать, если моя база данных изменяется?

Мастер code First to Database предназначен для создания начального набора классов, которые затем можно настроить и изменить. Если схема базы данных изменяется, можно вручную изменить классы или выполнить другой обратный инженер, чтобы перезаписать классы.

Использование кода первой миграции в существующую базу данных

Если вы хотите использовать миграцию code First Migrations с существующей базой данных, см. статью Code First Migrations to a existing database.

Итоги

В этом пошаговом руководстве мы рассмотрели разработку code First с помощью существующей базы данных. Мы использовали средства Entity Framework для Visual Studio для реверсивного инженера набора классов, сопоставленных с базой данных, и могли использоваться для хранения и извлечения данных.