Fluent nhibernate Nhibernate赢得';t映射来自另一个解决方案的模型
我做了一个“通用”并将我的模型放在那里,这样我就可以在我的其他项目中使用它们,这样我的所有项目都知道我使用的模型,但当我尝试打开一个会话工厂并使用fluent nhibernate映射这些模型时,它只会跳过我的映射。我有没有办法在不向我的公共项目中添加对fluent nhibernate的引用的情况下映射这些模型?您可以告诉FH在特定程序集中查找类型。无论您在何处执行FH配置,都需要参考您的公共项目,但我不认为这有问题。这是自动持久性帮助器的一个示例:Fluent nhibernate Nhibernate赢得';t映射来自另一个解决方案的模型,fluent-nhibernate,Fluent Nhibernate,我做了一个“通用”并将我的模型放在那里,这样我就可以在我的其他项目中使用它们,这样我的所有项目都知道我使用的模型,但当我尝试打开一个会话工厂并使用fluent nhibernate映射这些模型时,它只会跳过我的映射。我有没有办法在不向我的公共项目中添加对fluent nhibernate的引用的情况下映射这些模型?您可以告诉FH在特定程序集中查找类型。无论您在何处执行FH配置,都需要参考您的公共项目,但我不认为这有问题。这是自动持久性帮助器的一个示例: public class Auto
public class AutoPersistenceModel
{
public AutoPersistenceModel GetModel()
{
var model = AutoMap.AssemblyOf<Common.YourClassName>(new AutomappingConfiguration()) // add types-to-map
.Conventions.AddFromAssemblyOf<TableNameConvention>() // add generic conventions
.Conventions.AddFromAssemblyOf<AutoPersistenceModel>() // add specific conventions
.UseOverridesFromAssemblyOf<AutoPersistenceModel>(); // add mapping overrides
return model;
}
}
public class AutomappingConfiguration : DefaultAutomappingConfiguration
{
/// <summary>
/// defining which types should be auto-mapped...
/// </summary>
/// <param name="type"></param>
/// <returns></returns>
public override bool ShouldMap(System.Type type)
{
var interfaces = type.GetInterfaces();
return
interfaces.Any(
x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IEntityWithTypedId<>));
}
/// <summary>
/// defining which properties should be auto-mapped...
/// </summary>
/// <param name="member"></param>
/// <returns></returns>
public override bool ShouldMap(Member member)
{
return base.ShouldMap(member) && member.CanWrite &&
!member.MemberInfo.IsDefined(typeof (NotMappedAttribute), false);
}
}
公共类自动持久性模型
{
公共自动持久性模型GetModel()
{
var model=AutoMap.AssemblyOf(new AutomappingConfiguration())//向映射添加类型
.Conventions.AddFromAssemblyOf()//添加常规约定
.Conventions.AddFromAssemblyOf()//添加特定约定
.UseOverridesFromAssemblyOf();//添加映射覆盖
收益模型;
}
}
公共类自动映射配置:默认自动映射配置
{
///
///正在定义应自动映射的类型。。。
///
///
///
公共覆盖布尔ShouldMap(System.Type)
{
var interfaces=type.GetInterfaces();
返回
接口,有吗(
x=>x.IsGenericType&&x.GetGenericTypeDefinition()==typeof(IEntityWithTypedId));
}
///
///正在定义应自动映射的属性。。。
///
///
///
公共覆盖布尔ShouldMap(成员)
{
返回base.ShouldMap(member)和&member.CanWrite&&
!member.MemberInfo.IsDefined(typeof(NotMappedAttribute),false);
}
}
sessionFactory=fluntly.Configure()
.Database(sqlConfig)
.Mappings(m=>m.AutoMappings.Add(新的AutoPersistenceModel().GetModel()))
.CurrentSessionContext()
.BuildSessionFactory();
谢谢你的回答,但我找到了一种更简单的方法来做我想做的事,
我从m.FluentMappings.AddFromAssemblyOf()更改了会话工厂映射配置
到
m、 FluentMappings.AddFromAssemblyOf()的
它又开始工作了
sessionFactory = Fluently.Configure()
.Database(sqlConfig)
.Mappings(m => m.AutoMappings.Add(new AutoPersistenceModel().GetModel()))
.CurrentSessionContext<T>()
.BuildSessionFactory();