流利的 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();
}
如何从两个不同的组件中使用 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();
}