代码之家  ›  专栏  ›  技术社区  ›  Amitabh

用nHibernate在sqlserver2005中存储一组整数值?

  •  1
  • Amitabh  · 技术社区  · 14 年前

    存储和映射包含一组整数作为其属性之一的实体的最佳方法是什么?我正在使用nHibernate over sqlserver2005。

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

    我应该可以在片场查询。例如。

    select myEntity from MyEntities where myEntity.Integers = SetOf(2, 4, 5)
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   Stefan Steinegger    14 年前

    假设这个班

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