在常规EF中,我可以创建以下类,并且可以轻松地相互引用。但是,这似乎在EF Core中不起作用 - 是否必须要做一些不同的事情?
test.cs中
public class Test{
public int ID {get;set;}
public IList<OtherTest> OtherTests {get;set;}
}
OtherTest
public class OtherTest {
public int ID {get;set;}
public Test Test {get;set;}
}
我按如下方式创建初始数据:
public class DbInitializer
{
public static void Initialize(StatusContext context)
{
context.Database.EnsureCreated();
if (context.ServiceGroups.Any()) return;
var test = new Test();
var otherTest = new OtherTest {Test = test};
context.Tests.Add(test);
context.OtherTests.Add(otherTest);
context.SaveChanges();
}
}
修改 所以在浏览了各种论坛之后,我在控制器中发现了以下内容:
//return ccontext.OtherTests;
return context.OtherTests.Include(x=>x.Test);
然后我在Startup.cs中进行了以下更改:
//services.AddMvc();
services.AddMvc().AddJsonOptions(options =>
options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore);
但是,我注意到以下内容被返回: [ { “id”:1, “测试”:{ “id”:1, “其他测试”:[] } } ]
我看到这可以如何进入循环引用,但建议我可以在响应中加载集合的建议是什么?试图坚持.ThenInclude(y =&gt; y.OtherTests)似乎没有削减它
编辑2 对于它的价值,我观察到当查询包含OtherTests列表的Test for API时,我得到以下结果: [{id:1,otherTests:[{id:1}]}]
请注意,上面未包含导航属性Test。但是,在查询OtherTest时,会显示导航属性OtherTests:
[{id:1,测试:{id:1,otherTests:[]}}]