2013-12-23 2 views
4

Database.SqlQuery은 스레드를 안전하지 않게 만드는 작업 (예 : 트랜잭션 생성 또는 참여 등)을 수행하는지 알 수 있습니까? Database.SqlQuery 스레드 안전

내가 여러 스레드에서 호출 할 수있는 코드의 조각 - 쿼리가 매우 하드 코딩, 솔직 (공유 사용자 코드 데이터에 액세스 할 수 없음)입니다 :

public virtual long GetId(string sql) 
{ 
    var newid = DbContext.Database.SqlQuery<long>(sql).First(); 
    return newid; 
} 

나의 목표이다 마이너 릴리스 중에 얻는다면 - 필요한 경우 동기화를 적절하게 구현할 수있는 기회를 갖게 될 것입니다.

답변

1

ADO.NET은 connection pooling을 사용하고 새로운 DbContext을 만드는 것은 상대적으로 가벼우므로이를 사용한 후에 처리 할 수있는 많은 컨텍스트를 만드는 것이 안전합니다.

필드/속성을 사용하는 대신 사용하여 새 DbContext을 만드는 것이 좋습니다.

첫 번째 질문에 대답하려면 질문에있는 코드와 같은 쿼리를 실행하면 구형 ADO.NET 방식에서와 같이 데이터베이스에 대한 문만 실행합니다.

+0

감사합니다. 당신의 대답은 좋았지 만, 프레임 워크 코드를 보았던 누군가가 알 수 있기를 바라고, 수행 된 작업 중 어느 것이 스레드 안전하지 않은지 외과 적으로 묻고있었습니다. –