我使用Entity Framework在我的數據庫中執行存儲過程(Azure SQL Server)。實體框架:InvalidOperationException:操作無效。連接已關閉
我的C#代碼如下所示:
using (var context = new MyDataContext())
numberOfEffectedRows = context.MySPName(this.Id);
在執行的大多數情況下(99.9%),這工作正常。但是,有時它失敗與此錯誤:
System.InvalidOperationException: Invalid operation. The connection is closed.
at System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command)
at System.Data.SqlClient.SqlInternalTransaction.Rollback()
at System.Data.SqlClient.SqlInternalTransaction.Dispose(Boolean disposing)
at System.Data.SqlClient.SqlTransaction.Dispose(Boolean disposing)
at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext](TTarget target, Action`2 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
at System.Data.Entity.Infrastructure.Interception.DbTransactionDispatcher.Dispose(DbTransaction transaction, DbInterceptionContext interceptionContext)
at System.Data.Entity.Core.EntityClient.EntityTransaction.Dispose(Boolean disposing)
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass4b.<ExecuteFunction>b__49()
at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
at System.Data.Entity.Core.Objects.ObjectContext.ExecuteFunction(String functionName, ObjectParameter[] parameters)
at ***.MyDataContext.MySPName(Nullable`1 Id) in ***
at ***.DoSomething() in ***
當這種情況發生:
- 我不知道爲什麼它的發生。在我看來就像隨機化。
- 我不知道我的「MySPName」是否被執行。
有人知道爲什麼發生這種情況,我怎麼知道我的存儲過程是否被執行?
是您粘貼的一個拋出異常的代碼片段? – neo
是的。根據StackTrace的代碼行'context.MySPName(this.Id);'是例外的來源。 – No1Lives4Ever
@ No1Lives4Ever確保在離開using語句之前枚舉查詢,EF使用延遲執行 –