使用Include()和Find()

时间:2015-06-08 07:06:54

标签: c# entity-framework

我正在努力优化一些实体框架代码,并遇到了一些上下文缓存问题。

var db = new transactionContext(); // lazy loading, proxy creation disabled.

var transactionsOfSameCustomer = db.Transactions.Where(t => t.CustomerId == currentTransaction.CustomerId && t.MostExpensiveItemId != Guid.Empty).Include("Items");

foreach (var transactionOfSameCustomer in transactionsOfSameCustomer)
{
    // method 1: slow
    var mostExpensiveItem = db.Items.Find(transactionOfSameCustomer.MostExpensiveItemId);

    // method 2: fast
    var mostExpensiveItem = transactionOfSameCustomer.Items.Where(i => i.ItemId == transactionOfSameCustomer.MostExpensiveItemId).First();
}

当前代码(方法1)使用db.Items.Find()使用Transaction,MostExpensiveItemId字段查找事务中最昂贵的项目。当我更改为transaction.Items.Where()(方法2)时,查询速度提高了约40倍。

我认为,因为Find()在访问数据库之前查询了上下文,它应该与在内存中的集合上使用Where()一样快(方法2)?

我正在运行Entity Framework 6.0。

0 个答案:

没有答案