2009-04-12 43 views
18

我有一些我想延遲加載的實體類型。但是,他們有一些內部(彙編)字段他們公開,但不在該類以外使用。這些字段是編譯器生成的(F#),我無法更改它們。的一個例子的例外是:忽略NHibernate代理的公共/內部字段

NHibernate.InvalidProxyTypeException: 以下類型可能不被用作 代理:Mappings.MTest:字段ID @ 47 不應公開也沒有內部

我理解爲什麼NHibernate正在這樣做,以及如果有字段(如果我訪問它們),會擾亂生成的代理的延遲加載屬性。但是,因爲我知道我不會使用字段,我可以以某種方式覆蓋NHibernate嗎?

有什麼辦法,我可以說「忽略此場」?我使用流利NHibernate,如果這使得它更容易。

編輯:我也應該注意到,我使用NHibernate的2.1.0阿爾法2

EDIT2:這裏主要的要點是,我想保持啓用惰性加載,這意味着我必須使用代理生成。禁用LazyLoading工程(無代理),但sorta擊敗了像NHibernate這樣的好框架的目的。

回答

16

我重組NHibernate的(除了獲得源和重建更容易),除去代碼,內部/公共領域錯誤。沒有這個檢查,LazyLoading似乎工作得很好。 (雖然我是新來的NHibernate,因此有可能的情況我不知道。)

編輯: 啊,有一個屬性,「use_proxy_validator」,將禁用所有驗證檢查。夠好了。

Fluently.Configure() 
    .ExposeConfiguration(fun cfg -> 
     cfg.Properties.Add("use_proxy_validator", "false"))... 
+1

this作品!您可以將此添加到「HibernatedProperties」 '' – 2011-12-14 10:30:13

0

你可能想看看 this page,它給出了使用F#和Fluent NHibernate的概述。

編輯我只注意到你的用戶名。我是否認爲這是你的博客?我多愚蠢。它似乎解決了你的問題,特別是「我們首先禁用LazyLoad,因爲大多數屬性都不是虛擬的,NHibernate將無法驗證映射,相反,我們顯式地使用了LazyLoad,比如Store引用。」?也許我只是誤解了這個問題。

+0

這正是問題。我現在做了虛擬的屬性,但沒有辦法讓後臺字段保密。我不想禁用延遲加載,我希望NHibernate能忍受它:)。除了這種謹慎的檢查外,我看不出任何技術上的原因,它不會起作用。 – MichaelGG 2009-04-12 09:40:42

+0

我想這更多的是與該代理人甚至不能擺在首位,如果有非虛擬成員,因爲它必然是它覆蓋了所有成員的子類產生的事實。不幸的是,我不熟悉F#提供任何具體建議。 – 2009-04-12 10:15:25

+0

他們可以,他們當然不能重寫字段。看到我的答案。 – MichaelGG 2009-04-12 10:18:29

1

可以使用

[XmlIgnore] 

屬性裝飾領域:)

+0

對於NHibernate?它忽視它,仍然墜毀。 – MichaelGG 2009-04-12 09:46:19

+0

奇怪:我用它來解決同樣的問題。也許這是因爲你使用FluentNHibernate .. – cwap 2009-04-12 10:25:53

+0

哦,這太爛了:(這將是一個可愛的解決方案(雖然,我不能真正把屬性放在這些領域)你有沒有參考任何文檔顯示什麼XmlIgnore控件在NHibernate中?謝謝! – MichaelGG 2009-04-12 10:42:33