Эквивалентность Entity Framework для NHibernte SchemaExport - PullRequest
0 голосов
/ 04 мая 2010

Есть ли в Entity Framework эквивалентность NHibernate SchemaExport?

Учитывая, что у меня есть работающая Entity-Model, я хотел бы программно инициализировать базу данных.

Я хотел бы использовать эту функцию при настройке моих интеграционных тестов.

Также будет достаточно создать соответствующий DDL для Entity-Model.

Ответы [ 2 ]

3 голосов
/ 04 мая 2010

Да - учитывая, что вы работаете с Entity Framework 4 (что, как ни странно, вторая версия ...)

Редактировать: Это способ сделать это только с EF4. В моем оригинальном посте ниже описано, как добиться того же с помощью подхода «только код» в EF CTP3.

Как: экспортировать модель в базу данных в EF4
Чтобы экспортировать модель в базу данных, щелкните правой кнопкой мыши в любом месте дизайнера (где у вас нет сущности) и выберите «Создать базу данных из модели ...» и выполните шаги, описанные в мастере. Voila!


Оригинальный пост, нацеленный на EF4 CTP3 и только код: Этот код я использую в небольшой утилите установки.

var builder = new ContextBuilder<ObjectContext>();

// Register all configurations you need here
builder.Configurations.Add(new EntryConfiguration());
builder.Configurations.Add(new TagConfiguration());

var conn = GetUnOpenedSqlConnection();
var db = builder.Create(conn);

if (db.DatabaseExists())
{ db.DeleteDatabase(); }

 db.CreateDatabase();

Это работает на моей машине (хотя здесь я немного упростил для краткости ...), поэтому, если что-то не работает, это потому, что я слишком упрощен.

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

0 голосов
/ 04 мая 2010

Нет, и серьезно, я действительно задаюсь вопросом, почему nhibernate беспокоится, имея это.

Проблема в том, что преобразователь O / R содержит Меньше информации о базе данных, чем необходимо для нетривиальных установок.

Отсутствуют:

  • Индексы, полностью настроены
  • Информация об ограничениях на стороне сервера, триггерах (да, могут быть некоторые)
  • Информация о распределении объектов по таким элементам, как табличные пространства
  • Информация о разрешениях

Мне очень нравится тестовый метод (пожалуйста, проверьте, что база данных достаточно хороша для всех объектов, которые вы знаете), но генерация ОЧЕНЬ сложна - уже там, сделали это. Вам нужно несколько серьезных дополнительных аннотаций в ORM, чтобы можно было даже генерировать разумные индексы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...