我在多个程序集中遇到nhibernate自动映射问题。我认为我并不真正了解这种自动映射,所以如果有人能够详细解释我这一点。我将模型划分为3个项目(不能改变):
Entity
(摘要),A:Entity
(摘要),A1:A
,B
Entity
class Entity
的类,继承A
的类,并且类具有对 Base project 中某些类的引用, PROJECT1 我尝试在解决方案模型中的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
该怎么办?我不知道如何在这种情况下编写映射。
我想在第一个映射定义中映射基类,并使用所有其他定义来使用此映射类。但我不知道该怎么做。 谢谢你的帮助