假设我有一个像这样的数据结构-一个Person对象可能有很多地址,而一个地址可能有很多地址线。
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Address> Addresses { get; set; }
}
public class Address
{
public int Id { get; set; }
public List<AddressLine> AddressLines { get; set; }
public string PostCode { get; set; }
}
public class AddressLine
{
public int Id { get; set; }
public string AddressLine
}
然后,我使用实体框架允许将该数据结构存储到我的数据库中,从而:
public class DatabaseContext : DbContext
{
public DatabaseContext() : base("name=DatabaseConnection") { }
public DatabaseContext(string connectionString) : base(connectionString) { }
public DbSet<Person> People { get; set; }
}
最后,我有一个与此数据库进行交互的类:
public class ProcessPeople
{
private DatabaseContext localDatabase;
ProcessPeople(DatabaseContext db)
{
localDatabase = db;
}
public DoProcessingOfPerson(int idOfPerson)
{
Person person =
localDatabase.People.Where(p => p.Id.Equals(idOfPerson)).FirstOrDefault();
Console.WriteLine("First : " + person.FirstName);
Console.WriteLine("Last : " + person.LastName);
// Print address
if(person.Addresses != null && person.Addresses.Count > 0)
{
if(person.Addresses[0].AddressLines != null && person.Addresses[0].AddressLines.Count > 0)
{
Console.WriteLine("Address: " + person.Addresses[0].AddressLines[0].AddressLine);
}
}
else
{
Console.WriteLine("No address available");
}
}
}
问题在于,使用以下代码检索到该人之后:
Person person =
localDatabase.People.Where(p => p.Id.Equals(idOfPerson)).FirstOrDefault();
即使其中肯定有相关的Address和AddressLine数据,Addresses数组也总是 为空。
我的问题:
如何从Entity框架数据库中进行检索,以便同时检索Person类内嵌类中的所有数据?
我想拉一个人,然后能够在Addresses和AddressLines数组中导航-但是不会从数据库中检索这些类(即使它们存在于由实体生成的实际数据库中)框架]
请注意,为简便起见,我没有包含数据输入代码-我只是在寻找我需要对这一行进行的操作:
Person person =
localDatabase.People.Where(p => p.Id.Equals(idOfPerson)).FirstOrDefault();
为了获得所有填充在变量“ person”中的对象和子对象,假设存在相关数据。
感谢堆提供的任何帮助
大卫。
答案 0 :(得分:1)
您应按以下方式使用Include:
Person person = localDatabase.People
.Include(p=> p.Addresses)
.ThenInclude(add => add.AddressLine)
.Where(p => p.Id.Equals(idOfPerson)).FirstOrDefault();
有关更多详细信息:Loading Related Entities