如何映射使用Fluent NHibernate实现IEnumerable的自定义集合而不实现NHibernate.collection?

如何映射使用Fluent NHibernate实现IEnumerable的自定义集合而不实现NHibernate.collection?,nhibernate,collections,fluent-nhibernate,nhibernate-mapping,Nhibernate,Collections,Fluent Nhibernate,Nhibernate Mapping,我们正在使用自定义集合类来保存实体集合,但我在映射Fluent NHibernate的集合属性时遇到问题。我已经阅读了这个网站上所有关于类似主题的帖子,但似乎没有一篇能够解决我们的特殊情况 我们模型的典型集合类是: public class ElementList : IEnumerable<Element> { private List<Element> list = new List<Element>(); public ElementLi

我们正在使用自定义集合类来保存实体集合,但我在映射Fluent NHibernate的集合属性时遇到问题。我已经阅读了这个网站上所有关于类似主题的帖子,但似乎没有一篇能够解决我们的特殊情况

我们模型的典型集合类是:

public class ElementList : IEnumerable<Element>
{
    private List<Element> list = new List<Element>();
    public ElementList(IEnumerable<Element> elements)
    {
        this.list.AddRange(elements);
    }
    protected ElementList() {}
    protected List<Element> InternalList
    {
        get { return this.list; }
        set { this.list = value; }
    }
    public IEnumerator<Element> GetEnumerator()
    {
        return this.list.GetEnumerator();
    }
    IEnumerator IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }
}
我尝试将其映射如下:

public ParagraphMap()
{
    this.Id(x => x.Id);
    Component(
            x => x.Elements,
            m => m.HasMany<Element>(Reveal.Member<ElementList>("InternalList")).AsSet().KeyColumn("ParagraphId"));
}
我做错了什么


我注意到很多帖子说,不使用自定义集合可能更好,但这样做是我们项目的一个标准,所以我想坚持下去,让它正常工作。

我认为您的自定义集合也需要实现
IList
ICollection
。可能是我的收藏,因为它是一套。

谢谢,瓦迪姆。我最初尝试了IList,但这给了我同样的问题。只需将InternalList属性的返回类型切换到ICollection即可,现在一切正常。
public ParagraphMap()
{
    this.Id(x => x.Id);
    Component(
            x => x.Elements,
            m => m.HasMany<Element>(Reveal.Member<ElementList>("InternalList")).AsSet().KeyColumn("ParagraphId"));
}
var elements = new Element[] { new Element(), new Element() };
var paragraph = new Paragraph(elements);

using (var unitOfWork = this.repository.Begin())
{
    this.repository.Add(paragraph);
}