在我的 Entity Framework 6 应用程序中,我有一个人们电子邮件地址的表:
如果我想获取一个人的所有电子邮件地址,并检查这个人是否真实存在,那么以下哪种方式更有效率呢?
public class EmailAddress
{
public int Id { get; set; }
public int PersonId { get; set; }
public string EmailAddress { get; set; }
public virtual Person Person { get; set; }
}
Person
对象也引用了这些电子邮件地址:
public class Person
{
public int Id { get; set; }
{...}
public virtual ICollection<EmailAddress> EmailAddresses { get; set; }
}
如果我想获取一个人的所有电子邮件地址,并检查这个人是否真实存在,那么以下哪种方式更有效率呢?
Run an
Any()
query on thePersons
table and then another query on theEmailAddresses
table, usingPersonId
as a parameter:public IEnumerable<EmailAddress> GetAddressesByPerson(int personId) { if (!Context.Persons.Any(x => x.Id == personId)) { throw new Exception("Person not found"); } return Context.EmailAddresses.Where(x => x.PersonId == personId).ToList(); }
Get the
Person
object and return theEmailAddresses
navigation property:public IEnumerable<EmailAddress> GetAddressesByPerson(int personId) { var person = Context.Persons.Find(personId); if (person == null) { throw new Exception("Person not found") } return person.EmailAddress; }