如何使用来自两个不同程序集的表模型(实体(和她的Map类?如果我把map类放在模型的程序集中,一切都可以,但我需要为洋葱架构使用不同的程序集。我的实体类:
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; }
}
地图类别:
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();
}
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();
}
您需要告诉FluentHibernate哪些程序集要从加载映射。映射本身指向包含实体类的程序集,这些程序集使用普通的可组装引用系统,就像任何编译的.Net代码一样。
m.FluentMappings.AddFromAssemblyOf<T>()
指定从哪个程序集获取映射。不需要将T
指定为实体类之一。
此外,AddFromAssemblyOf)
本身只是一种方便的方法,还有其他方法可以定位映射程序集。