2009-10-21 69 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

相關問題