.net NHibernate模式导出和配置()catch-22
我想在一个新项目中使用,首先对我的类建模,然后根据类库生成数据库模式。我的计划是使用NHibernate hbm2ddl工具.net NHibernate模式导出和配置()catch-22,.net,nhibernate,hbm2ddl,schemaexport,.net,Nhibernate,Hbm2ddl,Schemaexport,我想在一个新项目中使用,首先对我的类建模,然后根据类库生成数据库模式。我的计划是使用NHibernate hbm2ddl工具SchemaExport实现这一点 问题是我无法让SchemaExport工作,因为它给我带来了一个奇怪的第22条军规问题。SchemaExport需要一个Configuration对象,该对象本身需要一个有效的NHibernate配置文件以及一组数据库映射 这里的问题是,当我执行Configure()时,它抱怨“无法确定实体'MyEntity'的表名;删除'table'属
SchemaExport
实现这一点
问题是我无法让SchemaExport
工作,因为它给我带来了一个奇怪的第22条军规问题。SchemaExport
需要一个Configuration
对象,该对象本身需要一个有效的NHibernate配置文件以及一组数据库映射
这里的问题是,当我执行Configure()时,它抱怨“无法确定实体'MyEntity'的表名;删除'table'属性或为其赋值。”
因此Configure()
方法要求表存在,而SchemaExport
应该基于配置创建它,我无法创建该配置,因为该表不存在
那么,我究竟应该如何创建一个有效的NHibernate配置
,其中包含SchemaExport
实际执行有用操作所需的映射,而不必抛出Configure()
并抱怨它找不到使用SchemaExport
创建的表呢?是否有一个“模式”可以设置配置对象,这样它就不会检查数据库中是否存在给定的表,或者是否有其他需要执行的操作?您可以发布配置文件吗
我在没有表的情况下一直使用这种方法,并且能够动态地生成模式。我猜你的一个.hbm文件可能有问题。尝试将您的模式缩减为一个表,让它工作,然后从那里开始构建它。作为参考,以下是我用来生成db模式的代码:
var cfg = new Configuration();
cfg.Configure();
var schema = new SchemaExport(cfg);
schema.Create(true, true);
这还将为您将脚本推送到控制台,以便您可以查看针对db生成的SQL。谢谢您的提示。由于我自己并不编写HBM,而是由Fluent NHibernate动态生成它,因此我没有注意到“GetTableName”约定中存在错误,导致生成的HBM中的“table”属性设置为空字符串。得到生成的HBM文件使问题变得非常清楚,我能够在几秒钟内解决它。耶!:)