저는 MySQL을 사용합니다 (MARS를 지원하지 않습니다). 그리고 병렬로 여러 개의 SELECT
을 실행하려고합니다. 연결 문자열은 동일하지만 각 SELECT
에 대해 다른 db 컨텍스트를 만듭니다.EF의 다중 컨텍스트에서 다중 SELECT에 MARS가 필요합니까?
그것은 다음과 같습니다
using (var db = DataContextCreator.Instance.Create())
{
return db.Customers
.Where(it => it.customer_Id > 10)
.Detach(db.Customers);
}
단어에 대한 Detach
- 그것은 기록의 기록 또는 무리를 취 헬퍼 방법입니다. 두 번째 경우에는 그것들을 (구체적인 데이터로 만들기 위해) 목록을 만들고, 분리 된 데이터를 돌려 보내는 db 컨텍스트로부터 레코드를 분리한다 (GC가 db 컨텍스트를 해제 할 수있다).
지금은 "이 Connection과 관련된 열린 DataReader가 이미 닫혀 있어야합니다."라는 두려운 말에 대한 오류가 나타납니다. DataReader를 명시 적으로 사용하지 않았으므로 100 % 이유가 확실합니다.
단일 연결 문자열을 사용하여 해당 db 컨텍스트를 모두 작성했기 때문입니까? 또는 다른 말로 표현하자면 위의 시나리오에서 MARS가 필요합니까?
나는 바퀴를 재발 명하고 싶지 않기 때문에 물었습니다. 그리고 내 모든 쿼리가 다소 작고 빠르기 때문에 바보 같은 해결 방법에 대해 생각하고 있습니다. DB 컨텍스트 생성자에서 잠금을 사용하고 있습니다. 이 방법은 데이터베이스를 쿼리하는 각 블록이 다른 블록과 병렬로 실행되지 않는다는 것을 보장합니다.
문제를 공개 했으므로 백만 설명해 주셔서 감사합니다. 나는 여러 개의 db 문맥을 사용하지만 동일한 'EntityConnection'을 계속해서 전달합니다. 이제는 문자열 (연결 문자열)을 전달하고 db 컨텍스트와 엔티티 연결을 동시에 생성하는 것으로 변경했습니다. 그래서 저는 둘 다 곱했습니다. 그리고 그 변화 이후 - 그것은 효과가있었습니다! – greenoldman
좋아, 나는 너가 이미 그것을하고 있었다는 것을 생각했다. 네, 매번'EntityConnection' 객체를 만드는 것이 당신의 경우에 들어가는 길입니다. ^^; –