NHibernate:如何添加多个程序集?

时间:2016-11-20 09:46:43

标签: c# sql-server nhibernate orm

我正在使用NHibernate 4,我有一个简单的SQL Server数据库,其中包含一些表:if { hdr(Host) -m reg -i ^project-.*$ }if { hdr(Host) -m beg -i project- }等...

NHibernate mapping classes and hbm files

我有以下助手类:

Orders

当它只包含

时,该类工作正常
Products

问题是我调用public class NHibernateHelper { private static ISessionFactory _sessionFactory; private static ISessionFactory SessionFactory { get { if (_sessionFactory == null) { var configuration = new Configuration(); configuration.Configure(); configuration.AddAssembly(typeof(Orders).Assembly); /*configuration.AddAssembly(typeof(Products).Assembly);*/ _sessionFactory = configuration.BuildSessionFactory(); } return _sessionFactory; } } } 方法添加第二个表映射类,如configuration.AddAssembly(typeof(Orders).Assembly);

我收到错误:

  

无法编译映射文档:StockManager.DBMapping.Orders.hbm.xml

我的问题是:如何为另一个表调用AddAssembly方法?

1 个答案:

答案 0 :(得分:0)

我建议使用FluentNhibernate代替xml映射。

var sessionFactory = Fluently.Configure()
  .Database(/* database config */)
  .Mappings(m =>
    m.AutoMappings
      .Add(AutoMap.AssemblyOf<Products>())
      .Add(AutoMap.AssemblyOf<Orders>())
   )
  .BuildSessionFactory();

您也可以使用自动映射通用基类。一个例子是使用单个泛型参数来指示Id类型。

public abstract class BaseEntity<T>  
{  
  public T Id { get; private set; }  
}

public class Product : BaseEntitiy<int> 
{
  //do stuff
}

使用这种基类时,您只需要像任何其他基类一样忽略它。

AutoMap.AssemblyOf<Entity>()
  .IgnoreBase(typeof(BaseEntity<>));