2009-08-04 50 views
2

我想构建一个DLL(应该可以从Web服务访问,也可能通过自动化从另一个应用程序访问)。在DLL中使用NHibernate

在这个DLL里面使用NHibernate有没有可能(所以通过自动化来访问DLL会起作用)?

我已经在丰富的客户端应用程序中使用NHibernate,它非常方便,但我必须对此进行一些更改的app.config。我看到的所有其他教程直接在Web服务上使用NHibernate - 并相应地更改web.config。

回答

3

如果你在代码中配置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大约有一些这方面的信息,但它是在短边位。

+0

好吧,我从来没有使用过流利的NHibernate - 但这看起来不错。 我宁愿没有流利的答案。我们目前正在使用映射属性,然后我们正在生成文件 - 但如果我在这里没有得到任何其他解决方案 - 您的答案将被肯定接受... – bernhardrusch 2009-08-04 15:13:13