如何映射使用Fluent NHibernate实现IEnumerable的自定义集合而不实现NHibernate.collection?
我们正在使用自定义集合类来保存实体集合,但我在映射Fluent NHibernate的集合属性时遇到问题。我已经阅读了这个网站上所有关于类似主题的帖子,但似乎没有一篇能够解决我们的特殊情况 我们模型的典型集合类是:如何映射使用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
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);
}