[C#][EF] Find & FirstOrDefault

這篇將做個小實驗
關於Entity Framework的查詢運算式
使用FindFirstOrDefault的差異


首先是關於Find的說明:DbSet.Find方法
可以看到它的查詢條件限定於Primary Key
並且是先從Cache中查詢
如果查不到,才到Database去查詢

所以若是查詢目標在Cache的狀況下,Find的效能是最快的
接著使用中文北風資料庫來測試一下

static void Main(string[] args)
{
    EFEntities ef = new EFEntities ();

    int id = 2;
    for (int i = 0; i < 5; i++)
    {
        var find = ef.產品資料.Find(id);
        Console.WriteLine(find.產品);
    }
    Console.ReadKey();
}

上方程式碼進行了5次的Find
但透過SQL Server Profiler
可以看到實際只進行1次查詢 (其餘4次直接從Cache拿到結果)

2017-3-10 下午 05-18-42

再來試試FirstOrDefault

static void Main(string[] args)
{
    EFEntities ef = new EFEntities();

    int id = 2;
    for (int i = 0; i < 5; i++)
    {
        var firstOrDefault = ef.產品資料.FirstOrDefault(x=> x.產品編號 == id);
        Console.WriteLine(firstOrDefault.產品);
    }
    Console.ReadKey();
}

結果如下,5次都會對Database進行查詢

2017-3-10 下午 05-25-57


結論: