减少数据库调用

时间:2015-06-27 19:11:36

标签: entity-framework database-performance iqueryable

在1 DB呼叫中执行此操作的最佳方法是什么?

if (dbContext.Owners.Any(i => i.Value == dog.OwnerID)) //Check if owner exists in db
{
    //Assign the owner's contact number to the dog entry
    dbDog.OwnerContactNumber = dbContext.Owners.First(i => i.Value == dog.OwnerID).ContactNumber; 
}

我的想法:

Owner owner = dbContext.Owners.FirstOrDefault(i => i.Value == dog.OwnerID); //Get the owner
if (owner)
{
    dbDog.OwnerContactNumber = owner.ContactNumber; //Assign the contact number
}

但是,必须声明额外的所有者变量感觉很糟糕。我有很多这些if语句,因此我将不得不创建一堆额外的不需要的所有者变量。

我怎样才能更好地做到这一点?

1 个答案:

答案 0 :(得分:2)

您只需要检查是否可以从数据库中获取所有者的ContactNumber,而不是整个所有者,因为您没有更新它。你甚至可以在不使用“不必要的”变量的情况下完成它:

dbDog.OwnerContactNumber = 
     dbContext.Owners
              .Where(i => i.Value == dog.OwnerID)
              .Select(o => o.ContactNumber)
              .FirstOrDefault() ?? dbDog.OwnerContactNumber;

因此,如果未找到所有者编号,则不会进行任何更改。