доменный дизайн с nhibernate и sql сервером - PullRequest
1 голос
/ 23 июня 2009

У меня есть эталонное приложение, которое я использую для решения проблем DDD, и сейчас я сосредоточен на постоянстве Альтернативным названием для этого поста могли быть инструменты и методы персистентности DDD / TDD, но это (очень) широкая тема, и у меня есть конкретный вопрос по SQL Server.

Я собираюсь обозначить свой текущий набор инструментов в этом абзаце в качестве фона, поэтому не стесняйтесь пропустить его, чтобы просто ответить на вопрос. Я использую NHibernate, Fluent NHibernate, Rhino, Visual Studio 2008 и SQL Server. В настоящее время я думаю о том, чтобы использовать NHibernate для генерации БД после любого изменения отображения данных, посмотреть на сгенерированные таблицы в VS 2008 и посмотреть, все ли мои тесты на постоянство отображения пройдены. Первоначально я хотел использовать SQLite в качестве тестовой базы данных, но я скептически отношусь к тому, что это точный показатель правильного отображения в некоторых отношениях (например, ссылочная целостность). Затем я попытался использовать SQL Ce, но мне было неприятно смотреть на сгенерированные таблицы с помощью VS. Вот почему я сейчас решил просто использовать SQL Server.

Следующий объект команды генерирует БД:

public class GenerateNewDb_SqlServer : ICommand
    {
        public GenerateNewDb_SqlServer(Configuration cfg)
            : base(string.Format("Update a Sql Server Database"))
        {
            _cfg = cfg;
        }

        public override void Execute()
        {
            try
            {
                var schema = new SchemaExport(_cfg);
                schema.Create(true, true);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Schema Export Error Message: " + ex);
            }
        }
    }

Проблема в том, что старые объекты базы данных все еще там. Мне нужно каким-то образом удалять всю базу данных sql server каждый раз перед использованием инструмента схемы NHibernate для ее создания. Может кто-нибудь сказать, пожалуйста, как это сделать в коде?


Есть ли что-то из объекта NHibernate.Cfg.Configuration, которое я могу использовать для удаления БД? Как будет выглядеть код?

Cheers, Berryl

Ответы [ 3 ]

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

рассмотрите возможность использования сценариев миграции для ваших сущностей SQL, вы можете попробовать

Скрипт Ruby-миграции или Дозвуковой

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

К счастью, это уже часть SchemaExport. Я не уверен, удалит ли он всю базу данных, но он отбросит все ссылочные объекты SQL. Как то так?

private void DropSchema(Configuration _cfg)
 {  
        new SchemaExport(_cfg)
            .Drop(
                false, //script to the console
                true, //execute against db
            );
 }
* 1003 P.S *. Обычно эта команда запускается непосредственно перед SchemaExport.Create, поэтому вы получаете новую базу данных ...

P.P.S. куча отличных модельно-ориентированных вещей для NHibernate здесь (эта серия скринкастов удивительна!)

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

Вам просто нужно выполнить операцию "drop database" на нужной БД, используя драйвер ODBC.

Edit: я не верю, что в конфигурации NHibernate есть что-то, что сделает это автоматически для вас; он должен быть частью определяемого вами внешнего процесса.

...