2009-10-21 75 views
2

现在,我将我的项目从经典流畅的nhibernate风格转换为手动定义每个域实体的ClassMap,让自动映射器为我自动生成映射。但我想继续使用我已经映射到经典风格的类,直到我可以调整自动映射以匹配旧的经典映射。流利的NHibernate如何将自动映射类型与非自动映射类型结合起来?

唯一的问题是,当自动映射器击中已经映射到经典流畅的nhibernate风格的类时,流畅的nhibernate会崩溃。

这是我的AutoPersistenceModel设置代码:

_autoPersistenceModel = AutoMap.AssemblyOf<DomainEntity>(); 
_autoPersistenceModel.AddMappingsFromAssembly(typeof (PlayerPersistenceMap).Assembly); 

_autoPersistenceModel.Alterations(x => 
        x.Add<AutoMappingAlteration>()) 
       .Setup(s => 
       { 
        s.FindIdentity = type => type.Name == "ID"; 

        s.IsBaseType = type => (type == typeof(DomainEntity)); 
       }) 
       .Conventions 
        .AddFromAssemblyOf<IdentityColumnConvention>() 
        .UseOverridesFromAssemblyOf<PlayerMappingOverride>(); 

谁能帮助我在这里?

更多信息:

我也试过在流利,NHibernate的维基here提到的技术。唉,我仍然收到错误:Duplicate class/entity mapping

回答

2

维基上的mixed fluent mappings and auto mappings example应该可以工作,如果没有的话就有bug。

作为解决方法,排除已从您的automappings手动映射的类型。你会怎么做,通过使用Where方法,如展现在维基的例子,这样的事情:

AutoMap.AssemblyOf<DomainEntity>() 
    .Where(type => type != typeof(OneOfYourManuallyMappedClasses)); 

如果你有很多流利的映射,你可以创建一个集合保持自动映射设置清洁:

var mappedTypes = new[] { typeof(One), typeof(Two) }; 

AutoMap.AssemblyOf<DomainEntity>() 
    .Where(type => !mappedTypes.Contains(type)); 

再次,这不应该是必要的,但如果你肯定它不会与维基比如工作,那么我建议提出的问题。

+0

我确实发现了我的SchemaUpdate相关代码中的一个错误,它可能触发了错误消息,但我不确定它们是否相关。我会在今天再次对此进行测试,如果问题仍然存在,请在此处发表评论。感谢您的输入。 – 2009-10-22 13:28:35

+0

嘿,我回去了,再次检查,如果我没有做一个解决方法,然后我仍然得到错误“重复类/实体映射” – 2009-10-22 16:55:46