데이터 업데이트/다시 시도를 위해 LINQ를 통해 액세스되는 MS SQL 2008 데이터베이스가 있습니다.Entity Framework == EntityException을 사용하여 데이터베이스에 동시 액세스
무거운 응용 프로그램에 대한 PerCall 인스턴스화 모드에서 WCF 서비스를 통해 내 linq에 액세스합니다. 이 응용 프로그램에는 서비스를 호출하는 스레드가 여러 개 있으며 여러 응용 프로그램이 sametime에서 실행 중입니다.
System.Data.EntityException이 잡힌 메시지는 공급자 연결에 대한 트랜잭션을 시작하는 동안 오류가 발생 =
나는 종종 일어나고 일부 EntityException을했습니다. 자세한 내용은 내부 예외를 참조하십시오. 자료 = System.Data.Entity 스택 트레이스 : System.Data.Objects.ObjectContext.SaveChanges에서 System.Data.EntityClient.EntityConnection.BeginTransaction()에서 System.Data.EntityClient.EntityConnection.BeginDbTransaction (IsolationLevel isolationLevel) 에서 (SaveOptions 옵션) D : \ Workspace \ XYZWASDF \ DataServer \ DataServer.cs의 Infoteam.GfK.TOMServer.DataServer.DataServer.SaveChanges()에서 : 줄 123 InnerException : System.Data.SqlClient.SqlException 메시지 = Une 누벨 트랜잭션은 세션을 자동으로 처리합니다. 출처 = 닷넷하는 SqlClient 데이터 공급자 있는 ErrorCode = -2146232060 클래스 = 16 LINENUMBER = 1 번호 = 3988 절차 = "" 서버 = IFT-srv114 주 = 1 스택 트레이스 : 의 System.Data.SQLClient에서 .SqlConnection.OnError (SqlException 예외, 부울 breakConnection) 에서 System.Data.SqlClient.SqlInternalConnection.OnError (SqlException 예외, 부울 breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() 에서 System.Data.SqlClient. TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHand LER, TdsParserStateObject stateObj) System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest에서 (바이트 [] 버퍼 TransactionManagerRequestType 요청 문자열 transactionName, TransactionManagerIsolationLevel isoLevel, INT32 시간 초과 SqlInternalTransaction 트랜잭션, TdsParserStateObject stateObj 부울 isDelegateControlRequest)에서의 System.Data.SQLClient 시스템에서 System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction에서 .SqlInternalConnectionTds.ExecuteTransactionYukon (transactionRequest transactionRequest, 문자열 transactionName, IsolationLevel 이소, SqlInternalTransaction internalTransaction, 부울 isDelegateControlRequest) (transactionRequest transactionRequest, 문자열 이름, IsolationLevel 이소, SqlInternalTransaction internalTransaction, 부울 isDelegateControlRequest) .Data.SqlClient.SqlInternalConnection.BeginSqlTransac System.Data.Common.DbConnection.BeginTransaction에서 System.Data.SqlClient.SqlConnection.BeginDbTransaction (IsolationLevel isolationLevel) 에서 System.Data.SqlClient.SqlInternalConnection.BeginTransaction (IsolationLevel의 ISO) 에서 기 (IsolationLevel의 ISO, 문자열 transactionName) (System.Data.EntityClient.EntityConnection.BeginDbTransaction에서 isolationLevel isolationLevel) (isolationLevel isolationLevel) 의 InnerException :
(죄송합니다 아주 읽을 수 없습니다입니다). (내부 예외 메시지는 "세션에서 실행중인 다른 스레드가 있기 때문에 새로운 트랜잭션이 허용되지 않습니다."
는 나는이 예외을 할 때 그것은 순전히 무작위, 난 루프에서 아니에요 확인했습니다, 나는이 문제를 방지하는 방법에 대한 아무 생각도 없어 어떤 도움이 정말 이해할 수있을 것이다을. :)
감사합니다편집을! 저는 여기에 코드를 보지 않고 가끔
//My DataServer method, which is a singleton
[MethodImpl(MethodImplOptions.Synchronized)]
public void SaveChanges()
{
lock (_lockObject)
{
try
{
_context.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
_changeListener.ManageIDAfterInsert();
}
catch (Exception ex)
{
Logger.Instance.Error("[DataServer:SaveChanges] Got an error when trying to save an object", ex);
//HERE I've this error
}
}
}
//One example where I can have exception sometimes, this is called through a WCF service, so I have a method which attach the object and then save it
private OrderStatus AddOrderStatus(OrderStatus orderStatus)
{
DataServer.DataServer.Instance.InsertOrUpdateDetachedObject(orderStatus);
return orderStatus;
}
이 오류의 원인이되는 코드를 표시 할 수 있습니까? –