Entity Framework 모델을 업데이트하는 동안 트랜잭션 오류 발생
두 개의 별도 데이터베이스에서 엔터티를 연결하려고 할 때 개발자는 "새로 만들기" 오류가 발생할 수 있습니다. 세션에서 실행 중인 다른 스레드가 있기 때문에 트랜잭션이 허용되지 않습니다." 이 당황스러운 메시지는 여러 루프와 Entity Framework 컨텍스트를 통합하는 코드를 시도할 때 발생할 수 있습니다.
기본적인 문제는 EF(Entity Framework)가 생성된 각 컨텍스트에 대해 세션을 유지한다는 사실에서 비롯됩니다. 여러 스레드가 동일한 컨텍스트에 동시에 액세스하면 트랜잭션 충돌이 발생할 수 있습니다. 이 문제를 해결하려면 서로 다른 스레드에서 동일한 컨텍스트를 수정하지 않는 것이 중요합니다.
제공된 예에서 오류의 근본 원인은 EF 쿼리에 중첩된 foreach 루프를 사용했기 때문입니다. 이 접근 방식은 외부 루프의 각 반복마다 새로운 EF 컨텍스트가 생성되어 수많은 활성 세션이 동일한 컨텍스트에 동시에 액세스하게 됨을 의미합니다.
최적의 솔루션은 쿼리를 사용하여 EF에서 데이터를 검색하고 저장하는 것입니다. 중간 컬렉션(예: IList
다음은 설명하기 위해 수정된 코드의 예입니다.
IList<Client> clientList = from a in _dbFeed.Client.Include("Auto") select a; foreach (RivWorks.Model.NegotiationAutos.Client client in clientList) { var companyFeedDetailList = from a in _dbRiv.AutoNegotiationDetails where a.ClientID == client.ClientID select a; // ... }
컨텍스트에서 데이터를 검색하여 거래가 중복될 위험을 제거하고 오류가 발생하지 않도록 합니다.
위 내용은 내 Entity Framework 코드에서 '세션에서 실행 중인 다른 스레드가 있기 때문에 새 트랜잭션이 허용되지 않습니다'가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!