繁体   English   中英

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

[英]NHibernate: How to add more than one assembly?

我正在使用NHibernate 4,我有一个简单的SQL Server数据库,其中包含一些表: OrdersProducts等。

NHibernate映射类和hbm文件

我有以下帮助程序类:

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);

问题是当我调用AddAssembly方法添加第二个表映射类(如Products

我收到一个错误:

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

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

我建议使用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<>));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM