存储和映射包含一组Integer作为其属性之一的Entity的最佳方法是什么?我在Sql Server 2005上使用nHibernate。
创建CLR自定义类型会有帮助吗?如果是,如何使用nHibernate映射?
我应该能够在Set上查询。 E.g。
select myEntity from MyEntities where myEntity.Integers = SetOf(2, 4, 5)
答案 0 :(得分:2)
假设这门课
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用户类型实现。