我有以下型号:
public class Competitor
{
public virtual int CompetitorId { get; set; }
public virtual string TeamName { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual DateTime BirthDate { get; set; }
public virtual IEnumerable<CompetitorBest> CompetitorBests { get; set; }
}
public class CompetitorBest
{
public virtual int ResultId { get; set; }
public virtual string BestTypeName { get; set; }
public virtual string IndoorOutdoor { get; set; }
public virtual int Season { get; set; }
public virtual string DisciplineName { get; set; }
public virtual string ResultValue { get; set; }
}
尝试将其保存到MongoDB实例时,出现以下错误:
超出了最大序列化深度(被序列化的对象是否具有循环引用?)。
我正在使用自动化(即 - 未设置任何类映射)
我看不出有什么不对的?
没有循环引用?
答案 0 :(得分:0)
确定, 我将此作为答案提交,主要是因为它有效 - 即允许我根据需要保存文档。
正如@chebum正确指出的那样,问题实际上是因为我首先使用nHibernate使用该模型拉动实体。
这意味着我的 IEnumerable&lt;竞争对手对象上的CompetitorBest&gt; 实际上是类型NHibernate.Collection.Generic.PersistentGenericBag
正如@chebum在评论中正确指出的那样,这将引用原始对象,因此创建一个循环引用。
而不是创建一个mongodb类映射(这是我应该做的...随意回答)这就是我现在所做的工作。
将竞争对手的课程改为:
public class Competitor
{
private IList<CompetitorBest> _competitorBests;
//other properties
public virtual IEnumerable<CompetitorBest> CompetitorBests
{
get { return _competitorBests.ToArray(); }
set { }
}
}
然后在我的nHibernate类映射中:
HasMany(x => x.CompetitorBests)
.Not.LazyLoad()
.Access.CamelCaseField(Prefix.Underscore)
.Inverse()
.AsBag()
.KeyColumn("competitorId");
同样,我确信有更好的方法(也许有mongodb类映射?) 但我已经添加了这个,因为它适用于我......现在。