2010-02-17 46 views
1

我有一個父母和孩子的對象。根據父對象中的值更改子對象的表。因此,例如,如果父對象具有參考「01」,則它將在下表中查找「Child01」,而如果參考爲「02」,則它將在表格「Child02」中查找。所有的子表都與列/名/數等相同。流利Nhibernate和動態表名

我的問題是,我該如何告訴Fluent Nhibernate或nhibernate查看哪個表,因爲每個父對象都是唯一的,並且可以引用許多不同的子表?

我已經看過Fluent中的IClassConvention,但是這似乎只在創建會話時才被調用,而不是每次創建對象時調用。

回答

1

我發現只有兩種方法可以做到這一點。

  1. 每當需要查看另一個動態表時,關閉並重新創建nhibernate會話。在創建會話時,使用IClassConvention根據用戶數據動態計算名稱。我發現這非常密集,因爲它是一個大型數據庫,每次創建會話都需要昂貴的操作。
  2. 對這些表使用POCO對象進行自定義數據訪問。

由於statichippo聲明我可以使用basechild對象並有多個子對象。由於數據庫的大小和動態表的數量,這不是一個真正有效的選項。

我的兩個解決方案都不是特別滿意,但POCO似乎是解決我的問題的最佳方法。

0

NHibernate旨在成爲一個對象關係映射器。這聽起來像你正在做更多的腳本風格,希望能夠映射你的數據而不是以OOP方式工作。

這聽起來像你有一個類層次結構雖然。它所聽起來像你想在你的代碼來創建(並相應地圖)是不同類型的兒童的層次:

BaseChild

- > SmartChild

- - > DumbChild

每個孩子都是要麼機靈還是愚蠢,但因爲他們都有一個名字,姓氏,年齡,等等,他們都是我定義這些的BaseChild類的實體。唯一的區別可能是SmartChild有智商,而DumbChild有一個FavoriteFootballTeam(這只是一個例子,當然沒有任何人冒犯;)。

NHibernate會讓你以多種方式映射這種關係。可能有1個表包含所有類或(聽起來像你想要的那樣),每個類一個表。

我瞭解問題/您在找什麼?

+0

你有點得到了我以後。我所處的情況是,在這種情況下是「賬戶」的父類具有「賬戶信息」的子列表。數據庫的結構方式是一個賬戶有一個與之相關的年份,並且這涉及到賬戶信息數據庫表,因此對於2001年的表格是AcctInfo01,2002是AcctInfo02等等。我不想在我的父(帳戶)對象多個列表類我寧願只有一個屬性叫AccountInfo這是一個列表從相關的表。這甚至有可能嗎? – lancscoder 2010-02-17 15:20:06

+0

我不知道有一種方法可以做到這一點,但我絕對不是NHibernate的專家。 – hackerhasid 2010-02-17 16:49:29