我可以使用IList而不是ISet吗?

时间:2009-12-24 19:55:50

标签: nhibernate

我不想使用ISet,因为它不是原生集合。

我可以使用IList逃脱吗?我的关系都有主键,任何时候它们都没有我不使用该集合来修改数据库等(父集合将处理任何数据库更新/级联等)。

2 个答案:

答案 0 :(得分:5)

您可以将IList与<bag>一起使用(我相信<idbag>)。我总是将IList与nHibernate一起使用,而且我也没有在开源代码中经常看到ISet与nHibernate一起使用。

我很好奇你使用的是HBM文件还是流利的nHibernate,使用Fluent它非常简单,只需要收集IList,它就可以完成剩下的工作。

另外,David,nHibernate可能不是“本机”,但你也不需要在域模型中引用nHibernate(至少我希望你不要)。持久性无知是nHibernate的特征之一。

我经常以类似的方式映射多对一关系:

父:

public IList<Child> Children { get; private set; }
public AddChild(Child child) {
  child.Parent = this;
  Children.Add(child);
}

子:

public Parent Parent { get; set; }

您还可以使用IEnumerable创建子项并使用IList的支持字段,但是您需要告诉nHibernate如何访问支持字段。这使得只能通过AddChild()方法添加子项。

答案 1 :(得分:4)

是的,NHibernate支持IList,但列表是一个集合而不是集合。如果要保持应用程序的行为相同,并且不想引用iesicollections,则可以将System.Collections.Generic.ICollection与实现System.Collections.Generic.HashSet一起使用。您仍然需要在解决方案中的某处提供Iesicollections,因为Nhibernate.dll依赖于它。