1

我正在與NHibernate的動態應用程序。我的目標是基於某些數據創建動態實體(包括類類型和映射xml文件)。例如,假設我想在運行時和實時動態創建一個Person實體。如何在不生成HBM XML文件的情況下創建動態NHibernate映射?

我使用Reflection.Emit來動態生成類的類型。爲了動態創建映射,我使用了Ayende's code.。但不幸的是,這段代碼不起作用,因爲mappings沒有Classes屬性。我試圖編碼爲Castle ActiveRecordFluent NHibernate的代碼,但它們生成HBM XML文件。由於我不想生成/創建映射文件,所以我不能使用這些解決方案。

有什麼方法可以像Ayende的解決方案不會被迫生成HBM XML映射文件,只是在內存中動態地執行所有操作?

回答

1

NHibernate 3.2有一個mapping-by-code層,可以做你想做的事。

我不是當然如果動態類可以工作,但它不會傷害嘗試。

+0

千恩萬謝,這似乎爲我的目的是非常有用的。我有一個關於將類型傳遞給泛型的相關問題:http://stackoverflow.com/questions/6562685/pass-type-to-generic-method-nested-generic。你也可以看看嗎? –

+0

@afsharm:Jon Skeet的[答案](http://stackoverflow.com/questions/232535/how-to-use-reflection-to-call-generic-method/232621#232621)馬修在[他的回答] (http://stackoverflow.com/questions/6562685/pass-type-to-generic-method-nested-generic/6563089#6563089)應該做的。 –

2

fluentnhibernate在內存中創建hbm只是爲了將它們提供給nhibernate。 fluentnhibernate具有不錯的自動映射功能,可以通過大量的慣例來完成這個工作。同樣在FNH 2.0中,他們正在努力跳過HBM以獲得更好的性能,但通常情況下,您永遠不會看到內存以外的映射。

樣品:

Assembly assembly = GetDynamicallyCreatedTypesAssembly(); 

ISessionFactory sf = Fluently.Configure() 
    .Database(...) 
    .Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(assembly))) 
    .BuildSessionFactory(); 
+0

我不知道FNH的輸出是否會被正確讀取......特別是關於彙編和類型名稱。 –

相關問題