我在實體框架中有兩個非常簡單的查詢,該列由外鍵列組成。換句話說,表中的字段有:優化實體框架查詢 - Timout已過期
pk : Primary key
name : name of object
f1: foreign key1
f2: foreign key2
...
我收到超時異常,尤其是這一個:
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
的查詢是:
var q = from x in db.Table select x;
var query_1 = q.GroupBy (record => record.f1);
var query2 = q.GroupBy(record => new {record.f1, record.f2});
我有大約3萬條記錄數據庫和我不明白爲什麼一個簡單的組會超時。你有什麼建議我該怎麼做?由於我使用的是實體框架4.1,我想從實現中抽象出數據庫,所以我想要一個解決方案,它不會改變數據庫引擎本身的任何東西。 可以索引f1或f2(或兩者)字段讓我更快的查詢?如果是這樣,有人可以解釋索引的概念以及如何在Enfity框架中做? 我不認爲增加超時應該是我應該解決的唯一解決方案,恐怕問題會隨着更多數據的來臨而保持。
編輯: 我已經試過什麼提到here約EF遷移。
我有這個類作爲結果:
namespace DataAccessLayer.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class IX_Table1_fId : DbMigration
{
public override void Up()
{
Console.WriteLine("Creating Index");
CreateIndex("Table1", "fId");
Console.WriteLine("Index Created");
}
public override void Down()
{
DropIndex("Table1", "IX_Table1_fId");
}
}
}
然而,當這段代碼被調用?我沒有看到控制檯中的打印語句。
在應用程序啓動時(如果您有默認數據庫初始值設定項),或者在包管理器控制檯中顯式鍵入'update-database'時,會自動調用'Up'和'Down'方法。在後一種情況下,控制檯輸出消失在黑洞中。 – 2012-07-31 19:04:28