2011-11-30 24 views
0

我有〜40個類,它們都實現了一個接口IEntity。如何在使用多態時對二級緩存進行粒度控制

在〜40個類中,許多對IEntity屬性使用「多對一」映射。這方面的一個例子是:

我相信使用NHibernate的對項目業主屬性映射,我將需要使用使用IEntity作爲基礎NHibernate的繼承映射之一。

問題是第二級高速緩存的配置與類定義綁定,而不是子類。我將不得不一次對模型中的所有〜40個類進行緩存,而且我無法緩存我想要的類,例如類別。

有誰知道我該如何映射一個實體,該實體具有的屬性是抽象實體的類型而不會失去進行二級緩存選擇的能力?

+0

我不能提供賞金,但如果你發佈了一個很好的答案,我會通過其他問題看看你以前的答案,看看他們是否值得讚賞。 – wllmsaccnt

+1

賞金可能仍然是正確的答案。一位用戶回過頭來提醒其他一些帖子可能會觸發垃圾郵件保護,所有代表將在一天之後丟失。 –

+1

這聽起來像你想映射,而不是請參閱http://ayende.com/blog/3966/nhibernate-mapping-any –

回答

1

首先,我不確定我是否真的有定義屬性類型的想法爲IEntity - 您確定Item可以成爲另一個項目的所有者嗎? Employee可以成爲物品的所有者嗎?
如果答案是肯定的,那就是你的系統的商業邏輯,那麼這裏就沒有關係。
否則,您可能會發現定義一個IOwner甚至是一個OwnerBase基類有助於區分這個區別。
這也可能有助於討論緩存哪些類和哪些類不緩存。

現在到了緩存的問題:

2級高速緩存的定義需要在兩個地方出現:
1.類的映射
2.關聯映射

你的情況

,我相信你確實必須打開所有IEntity類的二級緩存。 但是如果您只打開特定關聯的緩存,則只有那些關聯纔會被緩存。
(一個例外是使用Get<T>()Load<T>()方法,這也將導致你的對象被緩存。如果我沒有記錯的話,你可以告訴nHib 使用特定查詢緩存)

+0

是的,該項目可以由任何其他類型的實體或至少其中的一個子集所有。我最終使用了任何映射。 – wllmsaccnt

相關問題