在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>作为我的暴露类型。

在NHibernate中使用HashSet时,Collection不能为null异常

啊哈。我以为我已经剥离了所有的Fluent约定,但显然有一个集合约定将其设置为. asbag()。尽管. asset()没有覆盖. asbag()约定看起来像是一个bug(或至少是意外的行为),但一旦删除约定就会像预期的那样工作。