【发布时间】:2016-11-27 19:05:18
【问题描述】:
一直在玩 ef core 并且遇到了 include 语句的问题。对于这段代码,我得到了 2 家公司,这是我所期望的。
public IEnumerable<Company> GetAllCompanies(HsDbContext db)
{
var c = db.Company;
return c;
}
返回
[
{
"id":1,
"companyName":"new",
"admins":null,
"employees":null,
"courses":null
},
{
"id":2,
"companyName":"Test Company",
"admins":null,
"employees":null,
"courses":null
}
]
如您所见,有 2 家公司,所有相关属性均为空,因为我没有使用任何包含,这是我所期望的。现在,当我将方法更新为此:
public IEnumerable<Company> GetAllCompanies(HsDbContext db)
{
var c = db.Company
.Include(t => t.Employees)
.Include(t => t.Admins)
.ToList();
return c;
}
这是它返回的内容:
[
{
"id":1,
"companyName":"new",
"admins":[
{
"id":2,
"forename":"User",
"surname":"1",
"companyId":1
}
]
}
]
它只返回一家公司,并且只包括管理员。为什么不包括这两家公司及其员工?
public class Company
{
public int Id { get; set; }
public string CompanyName { get; set; }
public List<Admin> Admins { get; set; }
public List<Employee> Employees { get; set; }
public List<Course> Courses { get; set; }
public string GetFullName()
{
return CompanyName;
}
}
public class Employee
{
public int Id { get; set; }
public string Forename { get; set; }
public string Surname { get; set; }
public int CompanyId { get; set; }
[ForeignKey("CompanyId")]
public Company company { get; set; }
public ICollection<EmployeeCourse> Employeecourses { get; set; }
}
public class Admin
{
public int Id { get; set; }
public string Forename { get; set; }
public string Surname { get; set; }
public int CompanyId { get; set; }
[ForeignKey("CompanyId")]
public Company Company { get; set; }
}
【问题讨论】:
-
您是否尝试过使用 EF 6 或更低版本的相同代码?
-
你的 EF 版本是什么?
-
@Mafii,它是 EF Core - EF 7,见标题
-
你能包括你的类定义和映射吗?预期什么?
-
我和@JohnMorrison 有同样的问题,虽然下面@MohammadAkbari 接受的答案确实解决了这个问题,但这意味着我的模型失去了任何类型的强类型。 MS 文档 (docs.microsoft.com/en-us/ef/core/querying/related-data) 表明 include 应该可以工作,以及如何使用 Entry API 来实现它,尽管出于各种原因,我宁愿不在我的 API 中公开上下文。我将
DbContext注入到我的存储库中。关于导致此问题的原因以及如何解决它以使Include()按预期运行的任何进一步的想法?