使用nHibernate在Sql Server 2005中存储一组Integer值?

时间:2010-06-29 11:02:46

标签: sql-server nhibernate hibernate nhibernate-mapping

存储和映射包含一组Integer作为其属性之一的Entity的最佳方法是什么?我在Sql Server 2005上使用nHibernate。

创建CLR自定义类型会有帮助吗?如果是,如何使用nHibernate映射?

我应该能够在Set上查询。 E.g。

select myEntity from MyEntities where myEntity.Integers = SetOf(2, 4, 5)

1 个答案:

答案 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用户类型实现。