存儲和映射包含一組Integer作爲其屬性之一的實體的最佳方式是什麼?我在Sql Server 2005上使用nHibernate。用nHibernate在Sql Server 2005中存儲一組整數值?
創建一個CLR自定義類型在這裏會有幫助嗎?如果是的話,它如何使用nHibernate進行映射?
我應該可以在Set上查詢。例如。
select myEntity from MyEntities where myEntity.Integers = SetOf(2, 4, 5)
存儲和映射包含一組Integer作爲其屬性之一的實體的最佳方式是什麼?我在Sql Server 2005上使用nHibernate。用nHibernate在Sql Server 2005中存儲一組整數值?
創建一個CLR自定義類型在這裏會有幫助嗎?如果是的話,它如何使用nHibernate進行映射?
我應該可以在Set上查詢。例如。
select myEntity from MyEntities where myEntity.Integers = SetOf(2, 4, 5)
假設該類
class MyEntity
{
//...
public IList<int> Integers { get; private set; }
}
只要將它映射爲一組。
<class name="MyEntity">
<!-- ... -->
<set name="Integers" table="MyEntity_Integers">
<key column="MyEntity_FK"/>
<element type="Int32" column="Value"/>
</set>
</class>
你可以嘗試通過過濾收集:
from MyEntity e
where e.Integers in (:set)
and size(e.Integers) = :setSize
這可能不是非常快。
一種完全不同的方法:將某些序列化形式的整數存儲到單個文本字段中。
你可以編寫自己的NHibernate自定義類型。在存儲之前對整數進行排序。你可以用"2;45;78;898"
這樣的格式存儲它們。過濾將非常快,因爲它只是匹配字符串。更改數據庫中的集合可能會變得很困難。另一個問題是色譜柱長度有限。
Here is an example NHibernate用戶類型實現。
這是一種方式,但我也需要能夠在Set上查詢。喜歡哪裏MyEntity.Integers == SetOf(2,3,5) – Amitabh 2010-06-29 11:18:24
這是一個不同的問題。您無法爲任何查詢創建最佳映射。您需要告訴我您需要在這些數據結構上執行哪種查詢。 – 2010-06-29 11:23:44
「它的一個屬性」:你的意思是字段或屬性? 「CLR自定義類型」是什麼意思? – 2010-06-29 11:12:58
@Stefan:我的意思是屬性。 CLR已內置到Sql Server 2005中,我們可以創建自定義類型 – Amitabh 2010-06-29 11:15:18
當您使用NHibernate時,我通常會堅持使用NHibernate特性,這使得您可以更加獨立於Sql Server並降低開發成本。有NHibernate的用戶類型,但他們沒有在這裏使用。這個問題聽起來很基本,除非我錯過了一些東西。 **編輯:**在對我的問題的評論中,我看到你需要特定的查詢。將它們添加到問題中,是至關重要的。 – 2010-06-29 11:21:29