【发布时间】:2020-11-09 03:28:54
【问题描述】:
我真的完成了这个,但至少我想知道发生了什么。我们开始:
我的项目是一个带有 Code First Entity Framework Core 和 Angular 前端的 ASP.NET Core Web 应用程序。
我想控制何时加载引用的对象。它们可能很有用,但它们也可以在前端创建带有内部错误的循环引用。 (JSON 会无限长。)
型号:
class Book {
public virtual ICollection<Page> Pages { get; set; }
...simple properties
}
class Page {
public virtual Book Book { get; set; }
...simple properties
}
在此示例中,books 中的每本书都将有一个空/null Pages 列表。
using (var context = new MoneyStatsContext())
{
var books = context.Books.Where(rule => rule.State == 1).ToList();
}
在此示例中,Pages 列表不为空,并且每个 Page 都将设置其 Book 属性。从而创建一个循环引用。
using (var context = new MoneyStatsContext())
{
var books = context.Books.Where(rule => rule.State == 1).Include(x => x.Pages).ToList();
}
如何避免循环引用?除了创建一个新模型并手动指定每个属性之外,我真的没有其他(更简单的)选择吗?
.Select(new Book() {
...setting each property by hand
}
我发现的不起作用的解决方案:
- 尝试将此设置为 false 和 true。似乎没有任何改变。
public MyContext()
{
this.ChangeTracker.LazyLoadingEnabled = false;
}
- 尝试在 Startup.cs 中指定此项,但 options 没有 SerializerSettings 属性。
services.AddMvc().AddJsonOptions(options =>
{
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
});
任何帮助将不胜感激。提前致谢。
【问题讨论】:
标签: c# asp.net-mvc asp.net-core entity-framework-core