在NHibernate中使用HashSet时,Collection不能为null异常
本文关键字:不能 Collection null 异常 NHibernate HashSet | 更新日期: 2023-09-27 18:02:35
在我的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,则不会出现此错误,但正如您在映射中看到的那样,我希望设置行为,即使是来自未保存的实体。在我看来,HashSet<>
没有实现非通用ICollection
是一个问题。为未保存的实体设置行为的正确方法是什么?我还希望保留ICollection<string>
作为我的暴露类型。
啊哈。我以为我已经剥离了所有的Fluent约定,但显然有一个集合约定将其设置为. asbag()。尽管. asset()没有覆盖. asbag()约定看起来像是一个bug(或至少是意外的行为),但一旦删除约定就会像预期的那样工作。