如何使用外键加载EF Core中的实体

时间:2017-09-04 13:32:58

标签: c# entity-framework asp.net-core entity-framework-core postman

在常规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:[]}}]

0 个答案:

没有答案