0

我是 NHibernate 的新手,我基于教程: http: //nhibernate.info/doc/tutorials/first-nh-app/your-first-nhibernate-based-application.html。所以我有NHibernateHelper:

public class NHibernateHelper {
private static ISessionFactory _sessionFactory;

private static ISessionFactory SessionFactory
{
  get
  {
    if (_sessionFactory == null)
    {
      var configuration = new Configuration();

      configuration.Configure(); 

      configuration.AddAssembly(typeof (Product).Assembly);

      _sessionFactory = configuration.BuildSessionFactory();
    }

    return _sessionFactory;
  }
}

public static ISession OpenSession()
{
  return SessionFactory.OpenSession();
}  }

但我也有实体类别和用户?我是否需要使用代码 AddAssembly 将每个实体添加到配置中?因为当我添加代码时:

configuration.AddAssembly(typeof (Product).Assembly);
configuration.AddAssembly(typeof(Category).Assembly);

我有错误:

无法编译映射文件:MvcApplication1.Mappings.Product.hbm.xml

4

2 回答 2

0

首先检查您是否将所有映射文件(*.hbm.xml)的“Build Action”设置为“Embedded Resource”。这是非常重要的。

然后你只需要添加一次调用,AddAssembly因为 NHibernate 足够聪明,可以扫描程序集以嗅出你所有的entities映射到你所有的嵌入hbm.xml文件..

例如,您只需要提供once包含所有实体的程序集:-

_configuration.AddAssembly(typeof (Product).Assembly);

NHibernate 现在将Category自动查找(和所有其他),只要它们与Product. 高温高压

于 2013-04-26T15:42:02.093 回答
0

您也可以将映射标记添加到 web.config 中,而不是在 SessionFactory 初始化时将其添加到代码中。然后,您的代码将如下所示:

if (_sessionFactory == null)
{
  var configuration = new Configuration();

  configuration.Configure(); 

  _sessionFactory = configuration.BuildSessionFactory();
}

在 web 配置中,您必须指出所有映射所在的程序集,如下所示:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
  <property name="connection.provider">
    NHibernate.Connection.DriverConnectionProvider
  </property>
  <property name="dialect">
    NHibernate.Dialect.MsSql2005Dialect
  </property>
  <property name="connection.driver_class">
    NHibernate.Driver.SqlClientDriver
  </property>
  <property name="connection.connection_string">
    -- YOUR STRING CONNECTION --
  </property>
  <property name="proxyfactory.factory_class">
    NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle
  </property>
  <mapping assembly="You.Assembly.Namespace" />
</session-factory>

作为重要的配置标签“mapping assembly="Your.Assembly.Namespace"。正如前面提到的其他贡献者,将每个 hbm.xml 文件标记为嵌入资源非常重要,否则它将像您从未创建过一样通过这样做,您只需要在此程序集(项目)内创建所有映射,这些映射将在 NH 配置时自动读取。

于 2013-04-26T17:22:56.170 回答