27
因此,一切工作都很好,基本鑑別器映射。我可以直接與實體A和B進行交互,沒有任何問題。流利的NHibernate實體不同子類類型的HasMany集合
public class BaseType {}
public class EntityA : BaseType {}
public class EntityB : BaseType {}
這沒有在基本類型映射劇映射爲
DiscriminateSubClassesOnColumn<string>("Type")
.SubClass<BaseType>("A", m => { })
.SubClass<BaseType>("B", m => { });
時出現的問題:在聚合,我們要集合映射到每個子類
使用像下面
映射public class AggregateMap: BaseMap<Aggregate>
{
public AggregateMap()
{
HasMany<EntityA>(x => x.ACollection).AsSet().Cascade.All();
HasMany<EntityB>(x => x.BCollection).AsSet().Cascade.All();
}
}
這些明顯不是完整的映射,但是它是描述我所嘗試的最小量。添加到ACollection和BCollection的項目在保存聚合時通過級聯正確保持。但是,在檢索彙總時,對類型歧視存在混淆。
我已經運行了很多不同的可能的解決方案,我不知道什麼都不起作用。我覺得我不應該在集合上提供一個where子句,但事情對我來說並不合適。
任何線索,將不勝感激。
錯誤通過「關於類型的歧視混亂」,你的意思是,這兩個集返回所有的類型?不管他們的歧視? – 2009-06-12 07:44:38
我現在已經離開工作,所以不記得確切的錯誤。像'無法加載EntityA類型的實體,因爲它不匹配指定的EntityB'。 我們使用HasMany映射中的字符串在Where子句中入侵,並通過鑑別器列手動過濾。我只是認爲這種類型會「流過」,而且決定將自動執行。 – berko 2009-06-12 07:58:56
是的,要直接回答你的問題......我認爲它試圖加載所有類型,不管鑑別器如何。 – berko 2009-06-12 08:00:02