Как я могу создать базу данных из.edmx файл в Entity Framework?


Мне пришлось внезапно переключиться на работу над кодом First Entity Framework 4.1. Я начал с того, что ничего не знал об этом фреймворке, но за последние 8 часов мне стало гораздо удобнее читать блоги и статьи.

Этот блог, в частности , является одним из лучших блогов, которые я видел до сих пор на эту тему, но приведенные шаги не соответствуют моему опыту. В частности, мне нужно больше внимания уделять 3-му и 4-му шагам ("создание модели" и " замена кода DbContext Поколение", соответственно). Я не могу создать базу данных из моего определенного EntitySet. Я получаю SQL, и я могу выполнить, но я получаю следующую ошибку:

Could not locate entry in sysdatabases for "MyBD" database . No entry found with that name. Make sure that the name is entered correctly entity framework.

Если я снова выполняю SQL, я получаю ту же ошибку после имен таблиц, которые уже существуют в базе данных.

Если обновить DataConnection в Обозревателе серверов, то не будет создано таких таблиц, которые я определил в Entity Framework.

Как я могу избавиться от этой ошибки и успешно сгенерировать столы в моем .edmx?

Также я не могу найти опцию при щелчке правой кнопкой мыши в обозревателе решений для "создания базы данных" из выбранного файла класса, который имеет класс контекста, унаследованный от объекта DBContext. Я установил Entity framework 4.1 от Microsoft, поэтому он должен появиться там... Как я могу получить опцию Создать базу данных?

2 6

2 ответа:

Если вы создаете базу данных из модели, то сначала нужно выбрать пустую модель. Здесь представлены другие шаги для создания БД:

  1. выберите новое соединение
  2. установить имя сервера: если вы установили его, просто введите . чтобы выбрать значение по умолчанию. Вы также можете попробовать (local)
  3. установить новое имя базы данных
  4. скопируйте сценарий DDL на экран запросов среды SQL server management studio
  5. запустите скрипт для создания вашей БД

После запуска скрипта у вас будет начальная таблица. Конфигурационный файл будет иметь строку подключения с именем контейнера.

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

 using System;
    using System.Collections.Generic;

    public partial class Contact
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

Контекст будет иметь только одну таблицу.

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

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public DbSet<Contact> Contacts { get; set; }
    }

Вам не нужна модель TT. Вы можете добавить эти файлы непосредственно. Вам нужен один контекстный класс, наследуемый от DbContext и один файл частичного класса для каждого типа сущности. Если вы внесете изменения в модель, EF обнаружит это. Вам нужно определить инициализатор БД. Для примера демонстрации на этой веб-странице можно добавить инициализатор к другому методу. Если это веб-проект, вы добавляете эту функцию init в Global.asax - >application_Start для начальной разработки. У вас есть различные варианты инициализаторов. Я использую drop и create для первоначального развития.

 static void InitDbCheck()
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<PersonModelContainer>());
            using (var db = new PersonModelContainer())
            {
                //accessing a record will trigger to check db.
                int recordCount = db.Contacts.Count();
            }
        }

        static void Main(string[] args)
        {



            using (var db = new PersonModelContainer())
            {
                // Save some data
                db.Contacts.Add(new Contact { Name = "Bob" });
                db.Contacts.Add(new Contact { Name = "Ted" });
                db.Contacts.Add(new Contact { Name = "Jane" });
                db.SaveChanges();

                // Use LINQ to access data
                var people = from p in db.Contacts
                             orderby p.Name
                             select p;

                Console.WriteLine("All People:");
                foreach (var person in people)
                {
                    Console.WriteLine("- {0}", person.Name);
                }

                // Change someones name
                db.Contacts.First().Name = "Janet";
                db.SaveChanges();
            }
        }

Вот окончательное руководство от MSDN на

Как создать базу данных из концептуальной модели (Entity Data Model Tools) [.edmx] файл.

Копирование / вставка здесь просто для полноты картины:

Для создания базы данных на основе концептуальной модели

1 - добавьте an .файл edmx для вашего проекта.

Для получения информации о добавлении an .edmx-файл в проект, см. раздел как: Создайте новый .файл edmx (средства работы с моделью EDM) и Как добавить: Существующий.edmx-файл (Entity Data Model Tools).

2 - постройте концептуальную модель.

Вы можете использовать ADO.NET Конструктор моделей сущностных данных (Entity Designer) для создания сущностей и связей или вы можете вручную редактировать .edmx файл для построения концептуальной модели. Для получения дополнительной информации см. Реализация расширенных возможностей Entity Framework и CSDL, SSDL и Технические характеристики МСЛ.

Примечание при построении концептуальной модели, предупреждения о несопоставимости объекты и ассоциации могут появиться в списке ошибок. Вы можете игнорировать эти предупреждения вызваны тем, что Мастер создания базы данных добавит хранилище информация о модели и отображении (см. Шаг 3).

3 - щелкните правой кнопкой мыши пустое место на поверхности конструктора сущностей и выберите Создание базы данных из модели.

Диалоговое окно выбор подключения к данным для создания базы данных Отобразится мастер (инструменты модели данных сущности).

4 - Нажмите кнопку Создать соединение или выберите существующее соединение кнопка из выпадающего списка для подключения к базе данных.

Необходимо указать подключение к базе данных, чтобы типы столбцов для целевая база данных может быть определена на основе типов свойств в вашей базе данных. модель, и так, что информация о строке подключения может быть добавлена к вашей приложение. Обратите внимание, что предоставление информации о соединении не инициировать язык определения данных (DDL) поколение.

5 - Нажмите Кнопку Далее.

Мастер создания базы данных создает язык определения данных для создание базы данных. Сгенерированный DDL отображается в сводке и Диалоговое Окно Настройки (Мастер Создания Базы Данных).

6 - Нажмите Кнопку Готово.

По завершении мастер создания базы данных выполняет следующие действия:

Генерирует язык определения схемы хранилища (SSDL) и отображение язык спецификации (MSL) которые соответствуют предоставленным язык определения концептуальных схем (CSDL). То.edmx файл является обновлено сгенерированными SSDL и MSL. Обратите внимание, что мастер перезаписывает существующие SSDL и MSL.

Сохраняет созданный DDL в расположении, указанном в поле Сохранить DDL как текстовое поле. Дополнительные сведения о созданном DDL см. В разделе База данных Правила Генерации (Мастер Создания Базы Данных).

NoteNote, если модель хранения уже определена при запуске команды Create База данных Мастер, созданный DDL будет содержать инструкцию DROP TABLE и отбросьте оператор ограничения для каждого EntitySet и каждого Набор ассоциаций (соответственно), которые выводятся из хранилища модель.

Добавляет в приложение информацию о строке подключения.config или Web.конфиг файл.

Важно отметить, что Мастер создания базы данных не выполняет выполните сгенерированный DDL. Чтобы создать схему базы данных, которая соответствует вашей концептуальной модели, вы должны выполнить сгенерированный DDL независимо (например, выполните DDL в SQL Server Студия Управления).