ฉันได้รับไทม์เอาต์โดยใช้ Entity Framework (EF) เมื่อใช้การนำเข้าฟังก์ชั่นที่ใช้เวลาดำเนินการมากกว่า 30 วินาที ฉันลองสิ่งต่อไปนี้และไม่สามารถแก้ไขปัญหานี้ได้:
ฉันเพิ่มDefault Command Timeout=300000
สตริงการเชื่อมต่อในApp.Configไฟล์ในโครงการที่มีไฟล์ EDMX เป็นข้อเสนอแนะที่นี่
นี่คือลักษณะของสตริงการเชื่อมต่อของฉัน:
<add
name="MyEntityConnectionString"
connectionString="metadata=res://*/MyEntities.csdl|res://*/MyEntities.ssdl|
res://*/MyEntities.msl;
provider=System.Data.SqlClient;provider connection string="
Data Source=trekdevbox;Initial Catalog=StarTrekDatabase;
Persist Security Info=True;User ID=JamesTKirk;Password=IsFriendsWithSpock;
MultipleActiveResultSets=True;Default Command Timeout=300000;""
providerName="System.Data.EntityClient" />
ฉันพยายามตั้งค่า CommandTimeout ในที่เก็บของฉันโดยตรงเช่น:
private TrekEntities context = new TrekEntities();
public IEnumerable<TrekMatches> GetKirksFriends()
{
this.context.CommandTimeout = 180;
return this.context.GetKirksFriends();
}
ฉันจะทำอะไรได้อีกเพื่อให้ EF หมดเวลา? สิ่งนี้จะเกิดขึ้นสำหรับชุดข้อมูลที่มีขนาดใหญ่มากเท่านั้น ทุกอย่างทำงานได้ดีกับชุดข้อมูลขนาดเล็ก
นี่เป็นหนึ่งในข้อผิดพลาดที่ฉันได้รับ:
System.Data.EntityCommandExecutionException: มีข้อผิดพลาดเกิดขึ้นขณะดำเนินการกำหนดคำสั่ง ดูข้อยกเว้นภายในสำหรับรายละเอียด ---> System.Data.SqlClient.SqlException: การหมดเวลาหมดอายุแล้ว รอบระยะเวลาการหมดเวลาผ่านไปก่อนที่การดำเนินการจะเสร็จสิ้นหรือเซิร์ฟเวอร์ไม่ตอบสนอง
ตกลง - ฉันทำงานนี้และมันโง่ที่เกิดขึ้น ฉันมีทั้งสตริงการเชื่อมต่อด้วยDefault Command Timeout=300000
และ CommandTimeout ตั้งค่าเป็น 180 เมื่อฉันลบออกDefault Command Timeout
จากสตริงการเชื่อมต่อมันทำงานได้ ดังนั้นคำตอบคือการตั้งค่า CommandTimeout ด้วยตนเองในที่เก็บของคุณบนวัตถุบริบทของคุณเช่น:
this.context.CommandTimeout = 180;
เห็นได้ชัดว่าการตั้งค่าการหมดเวลาในสตริงการเชื่อมต่อไม่มีผลกับมัน
"
ไว้ในสตริง
NONCLUSTERED
ดัชนีลงในตารางบางส่วนสิ่งนี้แก้ไขปัญหาการหมดเวลาสำหรับเรา