Tôi đang hết thời gian sử dụng Entity Framework (EF) khi sử dụng chức năng nhập mất hơn 30 giây để hoàn thành. Tôi đã thử những điều sau đây và không thể giải quyết vấn đề này:
Tôi đã thêm vào Default Command Timeout=300000
chuỗi kết nối trong tệp App.Config trong dự án có tệp EDMX như được đề xuất ở đây .
Đây là chuỗi kết nối của tôi trông như thế nào:
<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" />
Tôi đã cố gắng thiết lập CommandTimeout trong kho lưu trữ của mình trực tiếp như vậy:
private TrekEntities context = new TrekEntities();
public IEnumerable<TrekMatches> GetKirksFriends()
{
this.context.CommandTimeout = 180;
return this.context.GetKirksFriends();
}
Tôi có thể làm gì khác để đưa EF hết thời gian? Điều này chỉ xảy ra đối với các bộ dữ liệu rất lớn. Tất cả mọi thứ hoạt động tốt với bộ dữ liệu nhỏ.
Đây là một trong những lỗi tôi gặp phải:
System.Data.EntityCommandExecutException: Xảy ra lỗi trong khi thực hiện định nghĩa lệnh. Xem ngoại lệ bên trong để biết chi tiết. ---> System.Data.SqlClient.SqlException: Hết hạn. Khoảng thời gian chờ đã trôi qua trước khi hoàn thành thao tác hoặc máy chủ không phản hồi.
OK - Tôi đã làm việc này và thật ngớ ngẩn những gì đã xảy ra. Tôi đã có cả chuỗi kết nối với Default Command Timeout=300000
và CommandTimeout được đặt thành 180. Khi tôi xóa Default Command Timeout
chuỗi kết nối, nó đã hoạt động. Vì vậy, câu trả lời là đặt thủ công CommandTimeout trong kho lưu trữ của bạn trên đối tượng ngữ cảnh của bạn như sau:
this.context.CommandTimeout = 180;
Rõ ràng việc thiết lập các cài đặt thời gian chờ trong chuỗi kết nối không ảnh hưởng đến nó.
"
trong chuỗi.
NONCLUSTERED
chỉ mục vào một số bảng, điều này đã giải quyết vấn đề hết thời gian cho chúng tôi.