我想构建一个DLL(应该从Web服务访问,可能通过自动化从另一个应用程序访问)。
是否有可能在此dll中使用NHibernate(因此通过自动化访问dll会起作用)?
我已经在富客户端应用程序中使用NHibernate,它非常方便,但我必须对app.config进行一些更改。我看到的所有其他教程都直接在Web服务上使用NHibernate - 并相应地更改了web.config。
答案 0 :(得分:3)
如果您在代码中配置NHibernate而不是使用app.config或web.config,那么您应该能够避免所描述的问题。例如,您可以使用Fluent NHibernate的Fluent Configuration功能来配置NHibernate,从而避免同时使用web.config和hibernate.cfg.xml,这可能会导致一些麻烦。
我目前在Web应用程序中使用此方法,其中数据访问层位于单独的程序集中,Web程序集不引用NHibernate,不需要修改web.config,也不需要hibernate.cfg.xml使用的文件。
以下是Fluent配置的示例:
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文档中有一些关于此的信息,但它有点偏短。