NHibernate SchemaExport не создает таблицы, когда «script» имеет значение false - PullRequest
8 голосов
/ 03 мая 2009

Делая мои первые шаги с NHibernate, я пытаюсь, чтобы он создавал мои таблицы автоматически из файлов hbm. Бэкэнд базы данных - SQL Server 2008 Developer Edition.

Это общий пример кода, который я вижу в учебниках NHibernate:

var cfg = new Configuration();
cfg.Configure();
cfg.AddAssembly(typeof(Posting).Assembly);
new SchemaExport(cfg).Execute(false,true,false,false);

К сожалению, это не работает. Я установил для show_sql значение true, и оно не печатает никаких утверждений. Глядя на профилировщик SQL, я вижу, как мое приложение подключается к БД, но ничего не делает.

Я могу это исправить, изменив первый параметр («скрипт») на true:

new SchemaExport(cfg).Execute(true,true,false,true);

Я не понимаю, почему. К сожалению, параметры SchemaExport на самом деле не объяснены (также нет разницы между .Create и .Execute), и я хотел бы выяснить, что делает этот параметр и почему он не нужен, то есть при использовании SQL Compact Edition (это работает также тогда, когда сценарий неверен)

1 Ответ

28 голосов
/ 03 мая 2009

SchemaExport является частью утилиты Hbm2Ddl, которая действительно отделена от функциональности NHibernate. Он не использует "show_sql", который используется, когда работает только NHibernate.

Чтобы получить копию создаваемой схемы, вы используете .SetOutputFile (имя файла)

Этот метод я использую, когда хочу создать новую базу данных. Я получаю отформатированную схему в файле MyDDL.sql, а база данных строится из схемы:

 private void BuildSchema(Configuration config)
 {

        new SchemaExport(config)
            .SetOutputFile(_fileName + "MyDDL.sql")
            .Execute(true /*script*/, true /*export to db*/,
                     false /*just drop*/, true /*format schema*/);
 }

SchemaExport.Create - это всего лишь ярлык для Schema.Execute с просто отбрасыванием false и форматом true.

public void Create(bool script, bool export)
    {
        Execute(script, export, false, true);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...