流利的 NHibernate C#。我如何使用来自两个不同程序集的 table 模型(实体)和她的地图 class?

Fluent NHibernate C#. How I can use table model(entity)and her Map class from two different assemblies?

如何从两个不同的组件中使用 table 模型(实体)和她的地图 class? 如果我将 map class 放入模型的程序集中,一切正常,但我需要为洋葱架构使用不同的程序集。 我的实体 class:

public partial class SP_Quarters   
{
    public virtual  int id { get; set; }
    public virtual Nullable<byte> active { get; set; }
    public virtual string name0_ru { get; set; }
    public virtual string name0_uz { get; set; }

}

地图class:

public SP_QuartersMap()
    {
   Id(x => x.id);
   Map(x => x.active);
   Map(x => x.name0_ru);
   Map(x => x.name0_uz);

    }

和会话工厂:

public ISession OpenSession()
    {

        ISessionFactory sessionFactory = Fluently.Configure()

            .Database(MsSqlConfiguration.MsSql2012.ConnectionString(ConnectionString))
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<SP_Quarters>())
            .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true))
            .BuildSessionFactory();
             return sessionFactory.OpenSession();  

}


解决方案

 public ISession OpenSession()
    {
            ISessionFactory sessionFactory = Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2012.ConnectionString(ConnectionString))
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<SP_Quarters>().Add<SP_QuartersMap>())
                  .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true))
            .BuildSessionFactory();

        return sessionFactory.OpenSession();
    }

您需要告诉 FluentNHibernate 哪些程序集加载映射。映射本身指向包含实体 类 的程序集,使用正常的程序集参考系统,就像任何编译的 .Net 代码一样。

m.FluentMappings.AddFromAssemblyOf<T>() 指定从哪个程序集获取 mappings。没有要求将 T 指定为实体 类.

中的一员

此外,AddFromAssemblyOf)本身只是一种方便的方法,还有其他方法可以定位映射程序集。

public ISession OpenSession()
{
        ISessionFactory sessionFactory = Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2012.ConnectionString(ConnectionString))
        .Mappings(m => m.FluentMappings.AddFromAssemblyOf<SP_Quarters>().Add<SP_QuartersMap>())
              .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true))
        .BuildSessionFactory();

    return sessionFactory.OpenSession();
}