使用 Entity Framework 减少数据库调用
Reduce database calls with Entity Framework
是否可以在 1 条语句中编写此代码(仅进行 1 次数据库调用?)并且仍然能够区分 "The member did not exist" 和 "The member did exist but had no dogs"。
public IEnumerable<Dog> GetDogsOfMember(int id)
{
if (dbContext.Members.Any(i => i.ID == id))
{
return dbContext.Dogs.Where(i => i.Member.ID == id);
}
return null;
}
如果每个 Dog
已经包含对 Member
的引用,您可以公开关系的另一端(如果您还没有):
public class Member
{
public int ID { get; set; }
// ...
public virtual ICollection<Dog> Dogs { get; set; }
}
然后您可以使用 Include()
:
发出单个高效查询
public IEnumerable<Dog> GetDogsOfMember(int id)
{
var memberWithDogs = dbContext.Members
.Include(i => i.Dogs)
.SingleOrDefault(i => i.ID == id);
if (memberWithDogs != null)
return memberWithDogs.Dogs;
return null;
}
是否可以在 1 条语句中编写此代码(仅进行 1 次数据库调用?)并且仍然能够区分 "The member did not exist" 和 "The member did exist but had no dogs"。
public IEnumerable<Dog> GetDogsOfMember(int id)
{
if (dbContext.Members.Any(i => i.ID == id))
{
return dbContext.Dogs.Where(i => i.Member.ID == id);
}
return null;
}
如果每个 Dog
已经包含对 Member
的引用,您可以公开关系的另一端(如果您还没有):
public class Member
{
public int ID { get; set; }
// ...
public virtual ICollection<Dog> Dogs { get; set; }
}
然后您可以使用 Include()
:
public IEnumerable<Dog> GetDogsOfMember(int id)
{
var memberWithDogs = dbContext.Members
.Include(i => i.Dogs)
.SingleOrDefault(i => i.ID == id);
if (memberWithDogs != null)
return memberWithDogs.Dogs;
return null;
}