我想构建一个DLL(应该可以从Web服务访问,也可能通过自动化从另一个应用程序访问)。在DLL中使用NHibernate
在这个DLL里面使用NHibernate有没有可能(所以通过自动化来访问DLL会起作用)?
我已经在丰富的客户端应用程序中使用NHibernate,它非常方便,但我必须对此进行一些更改的app.config。我看到的所有其他教程直接在Web服务上使用NHibernate - 并相应地更改web.config。
我想构建一个DLL(应该可以从Web服务访问,也可能通过自动化从另一个应用程序访问)。在DLL中使用NHibernate
在这个DLL里面使用NHibernate有没有可能(所以通过自动化来访问DLL会起作用)?
我已经在丰富的客户端应用程序中使用NHibernate,它非常方便,但我必须对此进行一些更改的app.config。我看到的所有其他教程直接在Web服务上使用NHibernate - 并相应地更改web.config。
如果你在代码中配置NHibernate而不是使用app.config或web.config,你应该能够避免你描述的问题。例如,您可以使用Fluent NHibernate的Fluent Configuration功能来配置NHibernate,从而避免使用web.config和hibernate.cfg.xml,这可能会导致一些麻烦。
我目前在一个Web应用程序中使用这种方法,其中数据访问层在一个单独的程序集中,并且Web程序集没有引用NHibernate,不需要修改web.config,也不是hibernate.cfg。使用xml文件。
这是一个良好的配置的一个例子:
sessionFactory = Fluently.Configure()
.Mappings(x => x
.FluentMappings.AddFromAssemblyOf<FooMap>()
.ConventionDiscovery.AddFromAssemblyOf<BarConvention>()
)
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(x => x
.Database("YourDbName")
.Server(@".\SQLEXPRESS")
.TrustedConnection())
.ShowSql())
.BuildSessionFactory();
更新:
相同的目标应该是可以使用的唯一标准NHibernate的,通过使用他们的程序化配置的可能性来实现。您可以在创建会话工厂时将IDictionary实例传递给Configuration.SetProperties(),而不是使用web.config等来配置数据库连接。
事情是这样的:
Configuration config = new Configuration();
IDictionary properties = new Hashtable();
properties["hibernate.dialect"] = "NHibernate.Dialect.MsSql2005Dialect";
// more properties here ...
config.SetProperties(properties);
的文档的Chapter 3大约有一些这方面的信息,但它是在短边位。
好吧,我从来没有使用过流利的NHibernate - 但这看起来不错。 我宁愿没有流利的答案。我们目前正在使用映射属性,然后我们正在生成文件 - 但如果我在这里没有得到任何其他解决方案 - 您的答案将被肯定接受... – bernhardrusch 2009-08-04 15:13:13