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

时间:2011-07-13 17:05:03

标签: c# nhibernate fluent-nhibernate nhibernate-mapping

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

1 个答案:

答案 0 :(得分:5)

啊哈。我以为我已经删除了所有Fluent惯例,但显然有一个集合约定将它设置为.AsBag()。一旦删除约定,就会按预期工作,尽管.AsSet()似乎没有覆盖.AsBag()约定的错误(或至少是意外的行为)。