NHibernate中INT的映射列表

NHibernate中INT的映射列表,nhibernate,mapping,one-to-many,Nhibernate,Mapping,One To Many,在NHibernate手册中,我发现了如下映射: <bag name="Sizes" table="SIZES" order-by="SIZE ASC"> <key column="OWNER"/> <element column="SIZE" type="Int32"/> </bag> public class TwitterApplication { public virtual int Id { get; set;

在NHibernate手册中,我发现了如下映射:

<bag name="Sizes" table="SIZES" order-by="SIZE ASC">
    <key column="OWNER"/>
    <element column="SIZE" type="Int32"/>
</bag>
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; }
}


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

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

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

那么,您认为在一个类中有一个int列表有用吗?还是一个guid、enum、double的列表

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

这对您来说有意义吗?

您的应用程序运行所在的业务领域的要求将决定您应该拥有一个INT列表(一组值类型)还是一个实体列表。如果一个
IList
有一个很好的用例,那么一定要使用它,让NHibernate相应地映射这个关联。否则就把它拿走

然而,删除它,因为它对您来说似乎不熟悉,并不是一个有效的理由

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

<bag name="Sizes" table="SIZES" order-by="SIZE ASC">
    <key column="OWNER"/>
    <element column="SIZE" type="Int32"/>
</bag>
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; }
}
公共类twitter应用程序
{
公共虚拟整数Id{get;set;}
公共虚拟字符串ApplicationName{get;set;}
//其他属性(snip)
公共虚拟ISet关键字{get;set;}
}
我使用此映射是因为我知道:

  • 关键字的数量将很小 (约4-6)
  • 我对存储不感兴趣 关键字DateAdded等
  • 我不会去做寻呼或者 查询关键字,只需 同时检索它们, 或者根本没有

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

    使用ISet而不是IList是否有优势?@Rafael它们有不同的语义。集合是唯一项的无序集合。列表是非唯一项的有序集合。