Стратегии использования NHibernate для создания схемы - PullRequest
3 голосов
/ 26 ноября 2008

Я создаю новое приложение, которое использует NHibernate для создания схемы базы данных, но я вижу возможную проблему в будущем.

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

Приветствие Колин Г

PS Я не буду делать это с действующей базой данных, только используя ее для восстановления тестовых данных для интеграционного теста и непрерывной интеграции

Ответы [ 5 ]

5 голосов
/ 27 ноября 2008

При тестировании мы используем NHibernate для создания базы данных, а затем серию строителей для создания данных для каждого тестового устройства. Мы также используем Sqlite для этих тестов, поэтому они быстро светятся.

Наши строители выглядят примерно так:

public class CustomerBuilder : Builder<Customer>
{
   string firstName;
   string lastName;
   Guid id = Guid.Empty;

   public override Customer Build()
   {
      return new Customer() { Id = id, FirstName = firstName, LastName = }
   }

   public CustomerBuilder WithId(Guid newId)
   {
      id= newId;
      return this;
   }

   public CustomerBuilder WithFirstName(string newFirstName)
   {
      firstName = newFirstName;
      return this;
   }

   public CustomerBuilder WithLastName(string newLastName)
   {
      lastName = newLastName;
      return this;
   }
}

и использование:

var customer = new CustomerBuilder().WithFirstName("John").WithLastName("Doe").Build();

Поскольку каждая строка кода написана с использованием TDD, мы собираем комплексный набор данных из scatch и, как правило, реорганизуем некоторые из них на фабрики, которые обернут вышеописанное и сделают несложным ввод фиктивных данных. *

1 голос
/ 06 августа 2009

Просто быстрый вопрос, направленный @Chris Canal-

Я понимаю, что использование свободного интерфейса для создания ваших объектов делает его читабельным, но действительно ли это стоит дополнительных усилий, необходимых для написания этих "сборщиков", когда вы можете использовать синтаксис C # 3.0?

т.е. возьмите ваш пример:

var customer = new CustomerBuilder (). WithFirstName ("John"). WithLastName ("Doe"). Build ();

действительно ли это стоит усилий по созданию "компоновщика", когда вместо этого вы можете сделать это (что, возможно, столь же читабельно, и фактически меньше кода)?:

var customer = new Customer {FirstName = "John", LastName = "Doe"};

1 голос
/ 27 ноября 2008

Я думаю, что во многих ситуациях хорошо бы позволить NHibernate генерировать схему для вас. Чтобы воссоздать тестовые данные, вы либо используете код, управляемый платформой тестирования (например, NUnit), либо можете экспортировать свои тестовые данные в виде сценария SQL, который можно запустить после обновления схемы.

0 голосов
/ 10 июня 2009

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

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

0 голосов
/ 26 ноября 2008

Мы не обновляем схему из NHibernate. Мы используем SQLCompare для перемещения схем базы данных в разных средах. SQLCompare делает это неразрушающим образом.

Если вы уже используете NHibernate, я бы порекомендовал создать тестовые данные с кодом.

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