【问题标题】:NHibernate: How to add more than one assembly?NHibernate:如何添加多个程序集?
【发布时间】:2016-11-20 09:46:42
【问题描述】:

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

NHibernate mapping classes and hbm files

我有以下帮助类:

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 方法?

【问题讨论】:

    标签: c# sql-server nhibernate orm


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多