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

mrb*_*lah 0 nhibernate

我不想使用ISet,因为它不是本机集合.

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

Chr*_*ola 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);
}
Run Code Online (Sandbox Code Playgroud)

儿童:

public Parent Parent { get; set; }
Run Code Online (Sandbox Code Playgroud)

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