Nhibernate不会从另一个解决方案中映射模型

时间:2016-01-11 10:30:02

标签: fluent-nhibernate

我做了一个"普通"把我的模型放在那里,这样我就可以在我的其他项目中使用它们,这样我的所有项目都知道我使用的模型而不了解彼此,但当我尝试打开会话工厂并使用流畅的nhibernate映射这些模型时,它只会跳过我的映射。有没有什么办法可以映射这些模型,而不会在我的共同项目中添加对流利的nhibernate的引用?

2 个答案:

答案 0 :(得分:0)

您可以告诉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);
        }
    }

...

sessionFactory = Fluently.Configure()
.Database(sqlConfig)
.Mappings(m => m.AutoMappings.Add(new AutoPersistenceModel().GetModel()))
.CurrentSessionContext<T>()
.BuildSessionFactory();

答案 1 :(得分:0)

感谢您的回答,但我找到了一种更轻松的方式来做我想要的事情, 我从m.FluentMappings.AddFromAssemblyOf()更改了会话工厂映射配置 至 m.FluentMappings.AddFromAssemblyOf() 它又开始工作了