Nhibernate自动映射继承更多程序集

时间:2013-06-05 14:37:05

标签: hibernate nhibernate orm fluent-nhibernate automapping

我在多个程序集中遇到nhibernate自动映射问题。我认为我并不真正了解这种自动映射,所以如果有人能够详细解释我这一点。我将模型划分为3个项目(不能改变):


  1. 基础项目 - 类:Entity(摘要),A:Entity(摘要),A1:AB
  2. Project1 - 继承Entity class
  3. 的类
  4. 解决方案模型 - 具有继承Entity的类,继承A的类,并且类具有对 Base project 中某些类的引用, PROJECT1

  5. 我尝试在解决方案模型中的NHibernateHelper中自动映射所有这些类。这些是我的映射:

        private static readonly AutoPersistenceModel BaseAutoMappings =
            AutoMap.AssemblyOf<Entity>()
                   .IncludeBase<A>()
                   .UseOverridesFromAssemblyOf<EntityOverride>();
    
        private static readonly AutoPersistenceModel Project1AutoMappings =
            AutoMap.AssemblyOf<--some class in Project1 assembly-->()
                   .Where(type => type.IsSubclassOf(typeof(Entity)) ;      
    
        private static readonly AutoPersistenceModel SolutionModelMappings =
            AutoMap.AssemblyOf<--some class in SolutionModel assembly-->()
                   .Where(type => type.IsSubclassOf(typeof(Entity)))
                   .AddEntityAssembly(Assembly.GetAssembly(typeof(Entity)))
                   .IncludeBase<A>()
                   .UseOverridesFromAssemblyOf<EntityOverride>();     
    

    问题是,如果我有这样的映射,则Solution model中继承类A的所有类都不会映射。 (当我查看NHibernate控制台日志时,我在Candidate类型中看到它们,但在Mapped类型中看不到它们)。

    如果我不使用第一个映射,那么一切都没问题,除了没有加载类B的覆盖(我认为这是因为在Solution model项目中没有继承B类。

    如果我在最后一个映射中没有.AddEntityAssembly(Assembly.GetAssembly(typeof(Entity))),则抛出异常“An association from the table --some table that inherits A' refers to an unmapped class: A”。

    如果我将第一个自动映射定义更改为: private static readonly AutoPersistenceModel BaseAutoMappings =

        AutoMap.AssemblyOf<Entity>().Where(type => type == typeof(B))
               .UseOverridesFromAssemblyOf<EntityOverride>();
    

    然后一切正常(所有类都已映射,并且加载了类B的覆盖)。但是如果我在A2:A中创建了一些课程Project1该怎么办?我不知道如何在这种情况下编写映射。

    我想在第一个映射定义中映射基类,并使用所有其他定义来使用此映射类。但我不知道该怎么做。 谢谢你的帮助

0 个答案:

没有答案