Tamamlanması 30 saniyeden fazla süren bir işlev içe aktarma kullanırken Entity Framework (EF) kullanarak zaman aşımları alıyorum. Aşağıdakileri denedim ve bu sorunu çözemedim:
Burada önerildiği gibi EDMX dosyasına sahip projedeki App.Config dosyasındaki Default Command Timeout=300000
bağlantı dizesine ekledim .
Benim bağlantı dizesi böyle görünüyor:
<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" />
Benim depoda CommandTimeout ayarını doğrudan böyle denedim:
private TrekEntities context = new TrekEntities();
public IEnumerable<TrekMatches> GetKirksFriends()
{
this.context.CommandTimeout = 180;
return this.context.GetKirksFriends();
}
EF'in zaman aşımına uğraması için başka ne yapabilirim? Bu yalnızca çok büyük veri kümeleri için olur. Her şey küçük veri kümeleriyle iyi çalışır.
İşte aldığım hatalardan biri:
System.Data.EntityCommandExecutionException: Komut tanımı yürütülürken bir hata oluştu. Ayrıntılar için iç istisnayı inceleyin. ---> System.Data.SqlClient.SqlException: Zaman aşımı süresi doldu. İşlemin tamamlanmasından önce geçen zaman aşımı süresi veya sunucu yanıt vermiyor.
Tamam - bu işi aldım ve olan bu saçma. Ben hem bağlantı dizesi vardı Default Command Timeout=300000
ve CommandTimeout 180 olarak ayarlanmış. Default Command Timeout
Bağlantı dizesinden kaldırdığımda işe yaradı. Bu nedenle yanıt, deponuzdaki CommandTimeout'u içerik nesneniz üzerinde manuel olarak şu şekilde ayarlamaktır:
this.context.CommandTimeout = 180;
Görünüşe göre bağlantı dizesinde zaman aşımı ayarlarını yapmanın herhangi bir etkisi yoktur.
"
.
NONCLUSTERED
bazı tablolara indeks eklememiz gerektiğini fark ettik , bu bizim için zaman aşımı sorununu çözdü.