Fluent nhibernate Nhibernate赢得';t映射来自另一个解决方案的模型

Fluent nhibernate Nhibernate赢得';t映射来自另一个解决方案的模型,fluent-nhibernate,Fluent Nhibernate,我做了一个“通用”并将我的模型放在那里,这样我就可以在我的其他项目中使用它们,这样我的所有项目都知道我使用的模型,但当我尝试打开一个会话工厂并使用fluent nhibernate映射这些模型时,它只会跳过我的映射。我有没有办法在不向我的公共项目中添加对fluent nhibernate的引用的情况下映射这些模型?您可以告诉FH在特定程序集中查找类型。无论您在何处执行FH配置,都需要参考您的公共项目,但我不认为这有问题。这是自动持久性帮助器的一个示例: public class Auto

我做了一个“通用”并将我的模型放在那里,这样我就可以在我的其他项目中使用它们,这样我的所有项目都知道我使用的模型,但当我尝试打开一个会话工厂并使用fluent nhibernate映射这些模型时,它只会跳过我的映射。我有没有办法在不向我的公共项目中添加对fluent nhibernate的引用的情况下映射这些模型?

您可以告诉FH在特定程序集中查找类型。无论您在何处执行FH配置,都需要参考您的公共项目,但我不认为这有问题。这是自动持久性帮助器的一个示例:

    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();