本節,我們將介紹一些改善EF代碼的方法,包括編譯查詢、存儲模型視圖以及沖突處理等內容。
l CompiledQuery
提供對查詢的編譯和緩存以供重新使用。當相同的查詢需要執行很多遍的時候,那麼我們可以使用ComplieQuery將查詢的語句進行編譯以便下次使用,這樣可以免去對同一語句的多次處理,從而改善性能。
示例代碼如下:
[Test]
public void ComplieTest()
{
using (var db = new NorthwindEntities1())
{
//對查詢進行編譯
var customer = CompiledQuery.Compile<NorthwindEntities1, IQueryable<Customers>>(
(database) => database.Customers.Where(c => c.City == "London"));
//執行20次相同的查詢
for (int i = 0; i < 20; i++)
{
DateTime dt = System.DateTime.Now;
foreach (var c in customer(db))
Console.WriteLine(c.CustomerID);
Console.WriteLine(DateTime.Now.Subtract(dt).TotalMilliseconds);
Console.WriteLine("---------------------------------------------------");
}
}
}