我正在尝试从我的NHibernate模型和映射生成更新脚本,以便我可以将更新脚本放入delta脚本中,并允许从nant创建和更新我的数据库。
我可以使用以下方法获取更新脚本:
private static IList<string> GetUpdateScript(Configuration configuration, string dbConnectionString)
{
var dialect = Dialect.GetDialect(configuration.Properties);
using (var connection = new SqlConnection(dbConnectionString))
{
connection.Open();
return configuration.GenerateSchemaUpdateScript(dialect,
new DatabaseMetadata(connection, dialect))
.ToList();
}
}
但后来我想从我当前项目之外的项目中做到这一点,这就是我遇到的麻烦。
我想问题是关于从另一个项目创建Configuration对象 - 也许我会研究这个 - 我可以想象现在查看NHibernate代码......
有关如何解决此问题的任何想法?
=============================================== ============================= 好的,这是一个更新:
如果你想看看我在github上创建了一个项目:https://github.com/LouisSayers/NHibernateExample
该项目在TheProject项目中有一个Program.cs,这是一个工作示例,NHibernateUpdateScriptGenerator有一个Program.cs,它是有错误的位。
现在的问题是,当我从Configuration对象调用Configure时,nhibernate会抱怨没有找到方言,但是我的hibernate.cfg.xml中定义了方言:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="proxyfactory.factory_class">
NHibernate.ByteCode.Castle.ProxyFactoryFactory,
NHibernate.ByteCode.Castle
</property>
<property name="dialect">
NHibernate.Dialect.MsSql2005Dialect,
NHibernate
</property>
<property name="connection.connection_string_name">db</property>
<property name="adonet.batch_size">100</property>
<mapping assembly="TheProject"/>
</session-factory>
</hibernate-configuration>
答案 0 :(得分:0)
您需要在每个可以执行的项目中使用hibernate.cfg.xml。或者,您可以查看在NH3中使用新的Loquacious configuration。或FluentNhibernate's fluent configuration。
答案 1 :(得分:0)
明确说出哪个文件配置在其中解决了问题 - 我的印象是默认情况下会查看'hibernate.cfg.xml',但它似乎不是这样......以下是什么我添加了用方言解决问题:var nhConfig = configuration.Configure(“hibernate.cfg.xml”);