我有以下模型:
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 实例时,出现以下错误:
Maximum serialization depth exceeded (does the object being serialized have a circular reference?).
我正在使用自动映射(即不设置任何类映射)
我看不出哪里出了问题?
没有循环引用?
请您参考如下方法:
好的, 我将此作为答案提交,主要是因为它有效 - 即允许我根据需要保存文档。
正如@chebum 正确指出的那样,问题实际上在于我首先使用 nHibernate 拉动使用该模型的实体。
这意味着我的 Competitor 对象上的 IEnumerable< CompetitorBest > 实际上是 类型 NHibernate.Collection.Generic.PersistentGenericBag
正如@chebum 在评论中正确指出的那样,这将引用原始对象,因此创建了一个循环引用。
而不是创建一个 mongodb 类映射(这是我可能应该做的..随时回答)这是我现在所做的让事情正常工作。
将我的 Competitor 类更改为:
public class Competitor
{
private IList<CompetitorBest> _competitorBests;
//other properties
public virtual IEnumerable<CompetitorBest> CompetitorBests
{
get { return _competitorBests.ToArray(); }
set { }
}
}
然后在我的 nHibernate Class Map 中:
HasMany(x => x.CompetitorBests)
.Not.LazyLoad()
.Access.CamelCaseField(Prefix.Underscore)
.Inverse()
.AsBag()
.KeyColumn("competitorId");
同样,我确信有更好的方法(也许使用 mongodb 类映射??) 但我已经添加了这个,因为它对我有用……现在。
