0
我們有一個遺留的ASP.Net項目,我們目前正在重構MVP模式。 對於後端,我們使用Fluent NHibernate和oracle數據庫。 以前的開發人員直接在數據庫中有一個奇怪的本地化實現。 我們很難用流暢的nhibernate繪製它。遺留應用程序的奇怪流暢的nhibernate映射
我們有以下表格,這些表格位於不同的數據庫中。 (oracle模式)
db1.Activity
(
ID, (pk)
ID_LANGUAGENAME, (fk)
INPUT_DATE,
and so on...
)
db2.LanguageName
(
ID, (pk)
ID_LANGUAGE, (pk)
NAME
)
db2.Language
(
ID,
LANGUAGE,
LANGUAGE_SHORT
)
ID_LANGUAGE存儲在ASP.Net會話變量中。 我想映射的實體,以便我可以做這樣的查詢類似的東西。
SELECT LN.NAME, A.INPUT_DATE FROM db1.Activity A
INNER JOIN db2.LanguageName LN ON A.ID_LANGUAGENAME = LN.ID
INNER JOIN db2.Language L ON LN.ID_LANGUAGE = L.ID
WHERE A.ID = :ACTIVITYID AND L.ID = :LANGUAGEID_FROM_SESSION_VARIABLE
所以基本上我wan't,看起來像這樣的活動實體:
public class Activity
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual DateTime InputDate { get; set; }
}
凡的名字活動獲取的自動映射到數據庫中的正確LanguageName.Name領域。 這甚至可能與NHibernate?
這類作品,但是當我映射LanguageName到活動爲參照關係(1到1)我有時仍然得到一個NHibernate的異常,說明有多個與給定的ID的語言名稱。所以看起來過濾器並不總是適用。我應該設置過濾器的全局參數還是爲我實現的每個存儲庫設置參數? – 2013-02-11 22:02:30
必須在創建的每個ISession上設置過濾器,因爲它僅適用於此。另外,如果languageId在每次應用程序運行時都是靜態的,那麼可以在映射級別上設置它,這會使它更容易。 – Firo 2013-02-12 07:06:53