代码之家  ›  专栏  ›  技术社区  ›  bernhardrusch

在dll中使用nhibernate

  •  2
  • bernhardrusch  · 技术社区  · 15 年前

    我想建立一个动态链接库(应该从一个Web服务和可能从另一个应用程序通过自动化访问)。

    有没有可能在这个dll中使用nhibernate(所以通过自动化访问dll会起作用)?

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

    1 回复  |  直到 15 年前
        1
  •  3
  •   Erik Öjebo    15 年前

    如果您在代码中配置nhibernate,而不是使用app.config或web.config,那么应该能够避免您描述的问题。例如,您可以使用Fluent NHibernate's 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 文档中有一些关于这方面的信息,但有点简短。