我的NHibernate实体中有以下内容:
private ICollection<string> _stringSet = new HashSet<string>();
public virtual ICollection<string> StringSet
{
get { return _stringSet; }
}
然后,在我的Fluent映射中,我将其映射为:
HasMany(x => x.StringSet)
.Table("String_Set")
.Element("StringValue")
.AsSet();
不幸的是,当我尝试保存实体时,我得到一个ArgumentNullException
说“收集不能为空”。如果我将我的字段默认为List,我不会收到此错误,但正如您在我的映射中所看到的,我想要Set行为,即使是来自未保存的实体。在我看来,HashSet<>
没有实现非通用ICollection
是一个问题。为未保存的实体设置行为的正确方法是什么?我还希望将ICollection<string>
保留为我的暴露类型。
答案 0 :(得分:5)
啊哈。我以为我已经删除了所有Fluent惯例,但显然有一个集合约定将它设置为.AsBag()。一旦删除约定,就会按预期工作,尽管.AsSet()似乎没有覆盖.AsBag()约定的错误(或至少是意外的行为)。