2011-04-07 33 views
0

好的,首先我希望這是有道理的。Fluent Auto Mappings with abstract base also also part of model

我想基於以下想法爲我的應用使用流暢的自動映射。

public abstract class Container 
{ 
    public virtual int Id {get; set}; 
    public virtual string Name {get; set;} 
} 

public class FirstSubClass : Container 
{ 
    //properties and behaviour here 
} 

public class SecondSubClass : Container 
{ 
    //properties of SecondSubclass Here 
} 

public class ProcessStep 
{ 
    public virtual Container Source {get; set} 
    public virtual Container Destination {get; set;} 
} 

然而,當我嘗試生成架構或測試我的映射(使用SQLite或其他方式)它的失敗指出:

NHibernate.MappingException:從表中ProcessStep是指未映射類的關聯: ...... Entities.Container

如果我更改Container類並使其無法抽象,它就可以工作。

我可以根據基本類型公開一個實體上的一個屬性,而基本保持抽象嗎?

任何幫助將不勝感激。

回答

4

默認情況下,Fluent Nhibernate在生成映射時會忽略抽象基類。 把它列入你需要使用IncludeBase方法:

AutoMap.AssemblyOf<Container>(cfg) 
     .IncludeBase<Container>(); 
+0

感謝@Sly。自從提出這個問題後,我實際上已經開始提問,並想知道我是否可以從抽象基礎改爲接口。那麼我在哪裏引用Container,用IContainer替換?這可能是因爲ProcessStep無法維護任何給定的關鍵約束。然後,我可以生成模式而不生成約束,並允許空值? – 2011-04-08 15:52:33