2012-04-25 2 views
1

데이터베이스 또는 테이블 집합을 명시 적으로 잠글 수있는 도구가 Linq 내에 있습니까? 몇 가지 다른 데이터베이스로 작업 중이며 투명성있는 것을 찾고 있습니다. 놀랍게도 필자는 Linq이 동시성 문제를 처리하는 방법을 다루는 주제를 제외하고는 주제에서 많은 것을 찾을 수 없었습니다. 이는 범위를 벗어났습니다.C# Linq 4.0에서 데이터베이스 또는 테이블 집합을 잠급니다?

또는 데이터베이스를 잠금에 대한 다른 간단한 방법은 (특히 MSSQL, 사이베이스) 데이터베이스를 잠금

+0

이 Linq to Entities입니까? – BrokenGlass

+0

정확히 무엇을 의미하는지 확실하지 않습니다. 내 이해는 내가 SQL에 Linq 할 시도입니다. 처음에는 O/R 디자이너를 사용하여 데이터베이스 컨텍스트 개체를 설정했습니다. – Jerome

답변

3

는 LINQ의 범위 밖에 잘 나에게 흥미로운 일이 될 것이다; 관련된 유일한 잠금 측면은 동시성 보장을 제공하는 데 사용되는 특정 공급자의 잠금 의미 일 수 있습니다. 트랜잭션 처리에 의해 자동으로 적용될 잠금을 넘어서는 명시 적 잠금을 원하면 낮은 레벨로 가야합니다.

~ execute arbitrary SQL commands ~ Entity Framework를 사용하면 ExecuteStoreCommand 메서드를 데이터베이스 컨텍스트에서 사용할 수 있습니다.이 메서드는 SQL 문자열 만 실행합니다. 어떤 이유로 든 이전 LINQ2SQL 공급자를 사용하고있는 경우 동일한 목표를 달성하기 위해 비슷한 ExecuteCommand 메서드를 사용합니다.

"데이터베이스 잠금"(적어도 데이터베이스 용어)과 같은 것은 사실상 데이터베이스 전체가 배타적 액세스 모드로 신속하게 전환되어 철회 될 수 있다는 점에서 그렇습니다. 그것은 단지 한 것을 의미한다 : 단지 잠금을 복용으로 이것은 "간단한"로 근처 아무데도

sp_dboption mydatabase, "single user", true 

:베이스 (그리고 MSSQL)의 경우, 적절한 권한을 가진 누군가가 "단일 사용자"옵션을 설정하여이 작업을 수행 할 수 있습니다 한 번에 한 사람 만 데이터베이스에 연결할 수 있으므로 옵션을 설정할 때 연결되어 있고 다른 사람이 연결되어 있지 않은지 확인해야합니다 (경고없이 시작됩니다). 옵션을 끝내면 으로 설정해야합니다.

MySql에서 알다시피, 목표 데이터베이스에서 모든 사람의 권한을 변경하지 않으면이 방법을 사용할 수 없습니다.

대부분의 데이터베이스 서버는 SQL과 유사한 구문을 사용하므로 개별 테이블을 잠그는 것이 약간 쉽습니다. MySql은 명령을 사용하여 READ 또는 WRITE 잠금을 사용합니다.하지만 MySql 잠금이 다소 이상하게 작동하므로 링크 된 페이지를 읽는 것이 좋습니다. Sybase는 마찬가지로 LOCK TABLE 명령을 가지고 있는데이 경우 SHAREDEXCLUSIVE이라고합니다.

transaction의 컨텍스트 내에서 테이블을 잠글 것으로 예상되므로 잠금을 수행하기 전에 TransactionScope에 코드를 래핑하는 것이 좋습니다.

관련 문제