2010-04-03 55 views
2

我在使用抽象類NHibernate的,自動映射和鏈接抽象類

這是一個類似於此

public abstract class AbstractClassA {} 

public abstract class AbstractClassB : AbstractClassA {} 

public class ClassA : AbstractClassB {} 

當我嘗試的多條鏈使用NHibernate類結構的一些麻煩,自動映射和構建這些映射,我收到以下錯誤

「FluentNHibernate.Cfg.FluentConfigurationException未處理 消息:創建SessionFactory時使用了無效或不完整的配置。請參閱PotentialReasons集合和InnerException以獲取更多詳細信息。

  • 數據庫不是通過數據庫的方法進行配置。」

但是,如果我刪除AbstractClassB抽象的關鍵詞,一切工作正常。這個問題只有當我有一個以上的抽象類中發生類層次結構。

我手工配置的自動映射爲包括AbstractClassA和AbstractClassB使用下面的結合類

public class BindItemBases : IManualBinding 
{ 
    public void Bind(FluentNHibernate.Automapping.AutoPersistenceModel model) 
    { 
     model.IncludeBase<AbstractClassA>(); 
     model.IncludeBase<AbstractClassB>(); 
    } 
} 

我不得不做一些黑客來解決這個問題,但是必須有更好的方法來實現這個目標。當然nHibernate支持這樣的東西,我只是沒有想出如何正確配置它。

乾杯,

詹姆斯

回答

0

你爲什麼在您AutoMappings抽象類,都在數據庫中也呈現?你能否提供Fluent拋出的內部異常?

model.IncludeBase<AbstractClassA>(); 
model.IncludeBase<AbstractClassB>(); 

有了這個地方,您正試圖將AbstractClassB映射到數據庫,而這本不應該是您想要的。

+0

我想包括他們,因爲有幾個不同的類從他們派生。如果我刪除了摘要,所有的東西都可以正常工作,但我寧願不這樣做。如果我不包含基礎,那麼派生類將分別獲得它們自己的表。我不想那樣。如果我從AbstractClassA直接派生ClassA,那麼事情就是按照我想要的方式工作的。當我在中間添加AbstractClassB時,它會翻倒。 – 2010-04-03 05:42:00

+0

爲什麼不直接從映射中排除AbstractClassB,而將其作爲基類放置? – 2010-04-03 06:02:10

+0

如果我從映射中排除AbstractClassB,我得到一個映射異常,'從表ClassA的關聯引用一個未映射的類:AbstractClassB' – 2010-04-03 09:20:06