【问题标题】:Mapping list of ints in NHibernateNHibernate中整数的映射列表
【发布时间】:2011-04-13 01:49:33
【问题描述】:

在 NHibernate 手册中,我发现了这样的映射:

<bag name="Sizes" table="SIZES" order-by="SIZE ASC">
    <key column="OWNER"/>
    <element column="SIZE" type="Int32"/>
</bag>

我不禁想知道为什么有人想做这样的事情?映射普通整数是否比创建与给定整数对应的实体(本场景中的大小实体)并创建真正的一对多关系更好?

【问题讨论】:

    标签: nhibernate mapping one-to-many


    【解决方案1】:

    问题不在于您是否要像这样映射它,而在于您是否需要模型中的整数列表。

    你的模型中有一个整数列表时,你想像这样映射它。您不想仅仅因为映射而在模型中编写复杂的代码。

    那么,你认为在一个类中有一个整数列表有用吗?还是 Guid、枚举、双打列表?

    class Graph
    {
      IList<double> Values { get; private set; }
    }
    

    这对你来说没有意义吗?

    【讨论】:

      【解决方案2】:

      您的应用程序在其中运行的业务领域的要求将决定您应该拥有一个整数列表(值类型的集合)还是一个实体列表。如果IList&lt;int&gt; 有一个很好的用例,那么请务必使用它,并让 NHibernate 相应地映射此关联。否则,只需将其删除。

      但是,因为您觉得不熟悉而将其删除并不是正当理由。

      我在我的领域模型中经常使用它。现在我有很多基于搜索“关键字”索引推文的“Twitter 应用程序”,所以我将其映射如下:

      public class TwitterApplication
      {
          public virtual int Id { get; set; }
          public virtual string ApplicationName { get; set; }
      
          // other properties (snip)
      
          public virtual ISet<string> Keywords { get; set; }
      }
      

      我使用这个映射是因为我知道:

      1. 关键字的数量会很少 (大约 4 - 6 个)
      2. 我对存储不感兴趣 关键字添加日期等。
      3. 我不会进行 Paging 或 查询关键字,只需 同时检索它们, 或者根本没有

      在此基础上,我决定将其映射为字符串集合是合适的。

      【讨论】:

      • 使用 ISet 代替 IList 有优势吗?
      • @Rafael 他们有不同的语义。 Set 是唯一项的无序集合。 List 是非唯一项的有序集合。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多