2010-05-04 2 views
0

Существует ли эквивалентность в Entity Framework для NHibernate SchemaExport?Эквивалентность структуры Entity для NHibernte SchemaExport

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

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

Создание подходящего DDL для модели Entity также будет достаточно.

+0

Хотя ответ, который я дал для создания базы данных, я бы рекомендовал вместо этого использовать «TransactionScope» в ваших тестах, которые вы храните в закрытом поле в тестовом классе.В настройке для каждого теста вы открываете область транзакций (я делаю это, назначая «новый» экземпляр), а при отрыве вы выполняете откат. –

ответ

3

Да - при условии, что вы работаете с Entity Framework (что, достаточно смутно, второй вариант ...)

Edit: Это способ сделать это только с EF4 , В моем первоначальном сообщении ниже описано, как выполнить одно и то же с помощью подхода Code-Only в EF CTP3.

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


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

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

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

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

+0

Кажется, что ContextBuilder на самом деле не является частью EF4, а только из Microsoft ADO.NET Entity Framework Feature Community Technology Preview 3. Правильно ли это? Также метод выше работает только с подходом «Только код», не так ли? Или существует способ регистрации существующего Model.edmx с ContextBuilder? – jbandi

+0

@jbandi: Правильно ... это CTP. Тем не менее, еще проще сделать то же самое в дизайнере. См. Мое редактирование. –

+0

Спасибо! Однако я знал о функциональности экспорта через дизайнера, но это не то, что я искал, я искал программное решение ... Я помету ваш ответ как – jbandi

-1

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

Проблема заключается в том, что у картографа O/R имеется МЕНЬШЕЕ информация о базе данных, чем требуется для нетривиальных настроек.

Отсутствующий являются:

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

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

+0

Все действительные баллы, но это, возможно, должно было быть добавлено как комментарий к исходному вопросу, а не как ответ, просто потому, что это не отвечает на исходный вопрос, это что-то, что нужно иметь в виду. –

Смежные вопросы