在DLL中使用NHibernate

时间:2009-08-04 14:44:04

标签: c# nhibernate

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

是否有可能在此dll中使用NHibernate(因此通过自动化访问dll会起作用)?

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

1 个答案:

答案 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文档中有一些关于此的信息,但它有点偏短。