1

SqlConnection을 함수에 전달하고 있습니다. 각 함수에 여러 객체 컨텍스트가 만들어집니다. 분산 된 트랜잭션 서비스를 켜지 않고 단일 트랜잭션 범위에서 사용할 수 있도록 모든 개체 컨텍스트에 대해 전달 된 단일 SqlConnection을 사용하고 싶습니다.기존 SqlConnection을 여러 ObjectContext에 전달하는 방법

public bool InsertObjects<T>(TransactionScope transaction, SqlConnection sqlConnection, IEnumerable<T> objectsToInsert) 
{ 
using (EntityConnection conn = GetEntityConnection()) 
    { 
     Type objectContextType; 
     ObjectContext objectContext = (ObjectContext) Activator.CreateInstance(objectContextType, new object[] {conn}); 

     //Some code using the objectContext 

    } 
} 
+0

나는'SqlConnection' 주위에 통과하지 것이다 - 당신이 어딘가에을 만든 다음 모든 곳에서 그것을 사용/주위 통과 같은 소리. 나는 그렇게하지 않을 것입니다. ** 연결 문자열 **을 오히려 전달하고 필요할 때마다 새로운 연결을 만듭니다. –

답변

1

이것은 좋은 방법은 아닌 것 같아 :

는 샘플 코드입니다. 왜 이런 짓을하는? 당신이해야 할이 작품 만들려면 : 모든 컨텍스트에 대한

  • 사용하는 모든 상황에 대해 동일한 연결 문자열 = 동일한 데이터베이스
  • 사용하는 것과 동일한 메타 데이터 (매핑) 또는 각 컨텍스트에 대해 별도의 메타 데이터 세트를 전달
  • 모든 상황은 어떤 상황이나 동작을 연결, 당신은 매핑이 여러 EDMXs이 전체의 개념으로 구분 된 몇 가지 복잡한 데이터베이스를 사용하지 않는 경우 다음 상황에 맞는 생성 그래서

을 실패를 엽니가 작성 될 때까지

  • 연결이 닫혀 있어야합니다 잘못된 것입니다. 하나의 데이터베이스에서 하나의 작업 = 하나의 작업 단위 = 하나의 컨텍스트 = 하나의 연결. 귀하의 경우 단일 엔티티 유형으로이 작업을 수행하려는 것처럼 보입니다 - 왜?

    또한 자신의 컬렉션을 객체 컨텍스트에 전달하면 컨텍스트가 최적의 방법으로 연결을 처리 할 수 ​​없으므로 필요없는 경우 풀어 놓을 수 있습니다.

  • 0

    더 나은 솔루션은 연결 풀입니다.
    개체에 연결 개체를 만들고 연결 풀링 옵션으로 연결하십시오.
    다음에 연결할 때 연결이 여전히 활성 상태인지 확인하여 사용합니다.
    연결이 없으면 연결됩니다.

    Here is a guide on how you use connection pools

    관련 문제