0

我使用FluentNHibernate和AutoMapping來映射持久化類。 對於幾乎所有的我的類層次結構,每個子類映射的默認Table工作正常,除了一個:這裏我有一個抽象基類「A」,A具有所有需要的數據字段。子類「B」,「C」,...「X」僅在行爲上有所不同。 「每個類的表」會導致很多不需要的表。
我想要創建一個覆蓋類來創建一個表A(我可以用IncludeBaseClass覆蓋來做到這一點,但是我該如何設置Discriminator Override類來將所有的子類放在這個表中? 流利的文件提出以下建議:如何獲得單個類層次結構的單個表繼承

public override bool IsDiscriminated(Type type) 
{ 
    return type.In(typeof(ClassOne), typeof(ClassTwo)); 
} 

我thinik這將boildown這對於我的情況:?

public override bool IsDiscriminated(Type type) 
{ 
    return (type == typeof(A)); 
} 

但是這將是覆蓋類來把這個方法

回答

0

「IsDiscriminated」方法是「DefaultAutomappingConfiguration」類的一部分。 通過重寫這個類,你可以改變的類映射方式:

public class MyAutomappingConfiguration : DefaultAutomappingConfiguration 
{ 
    public override bool ShouldMap(Type type) 
    { 
     return type.Namespace != null && 
       type.Namespace.Contains("Models"); 
    } 

    public override bool IsDiscriminated(Type type) 
    { 
     return type == typeof(Code); 
    } 
} 

注:ShouldMap是藏漢重寫爲使用這種配置類的防止「去哪兒」條款的使用在映射 這是傳遞到映射過程像這樣:

AutoMap.Assemblies(new MyAutoMappingConfig(), assembliesToMap.ToArray()).     Conventions.AddFromAssemblyOf<BaseEntity>(); 
1

將此方法放置在繼承自DefaultAutomappingConfiguration的類中。
也可能需要:return (type == typeof(A) || type.IsSubclassOf(typeof(A));

+0

我如何確保在(自動)映射過程中使用類? –

+0

我創造了這個示例類: \t'公共類TablePerHierarchyOverride:FluentNHibernate.Automapping.DefaultAutomappingConfiguration \t { \t \t公共覆蓋布爾IsDiscriminated(類型類型) \t \t { \t \t \t回報(類型== typeof運算(代碼)|| type == typeof(GenderCode)); \t \t} \t}' –

+0

最簡單的方法是在你的函數裏面設置一個斷點... –

相關問題