NHibernate SchemaExport和Configure()catch-22

Asb*_*erg 3 .net nhibernate schemaexport hbm2ddl

我想在新项目中使用DDD并首先为我的类建模,然后根据类库生成数据库模式.我的计划是使用NHibernate hbm2ddl工具执行此操作SchemaExport.

问题在于我无法使用它SchemaExport,因为它让我遇到了一个奇怪的catch-22问题.SchemaExport需要一个Configuration对象本身需要一个有效的NHibernate配置文件以及一组数据库映射.

这里的catch-22是当我执行Configure()时,它会抱怨"Could not determine the name of the table for entity 'MyEntity'; remove the 'table' attribute or assign a value to it."因此该Configure()方法需要表存在,而SchemaExport应该基于Configuration我无法创建的表来创建它,因为表不是没有'存在.

那么,我究竟应该如何创建一个有效的NHibernate,Configuration其中包含SchemaExport实际做一些有用的事情所需的映射而不Configure()抛出并抱怨它无法找到要创建的表SchemaExport?是否有"模式"我可以设置Configuration对象,因此它不会检查数据库中是否存在给定的表,或者还有其他我需要做的事情?

Mar*_*ski 9

你可以发布配置文件吗?

我一直使用这种方法,不存在任何表,并且能够动态生成模式.我的猜测是,你的某个.hbm文件中可能有一些东西.尝试将您的架构缩减到1个表格,让它工作,然后从那里构建它.作为参考,这是我用于生成db模式的代码:

    var cfg = new Configuration();
    cfg.Configure();
    var schema = new SchemaExport(cfg);
    schema.Create(true, true);
Run Code Online (Sandbox Code Playgroud)

这也会将脚本推送到控制台,因此您可以看到针对数据库生成的SQL.

  • 谢谢你的提示.由于我自己不编写HBM,而是由Fluent NHibernate动态生成,我没有注意到"GetTableName"约定中的错误导致生成的HBM中的"table"属性设置为一个空字符串.获取生成的HBM文件使问题非常清楚,我能够在几秒钟内修复它.好极了!:) (2认同)