는 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
명령을 가지고 있는데이 경우 SHARED
및 EXCLUSIVE
이라고합니다.
transaction의 컨텍스트 내에서 테이블을 잠글 것으로 예상되므로 잠금을 수행하기 전에 TransactionScope
에 코드를 래핑하는 것이 좋습니다.
이 Linq to Entities입니까? – BrokenGlass
정확히 무엇을 의미하는지 확실하지 않습니다. 내 이해는 내가 SQL에 Linq 할 시도입니다. 처음에는 O/R 디자이너를 사용하여 데이터베이스 컨텍스트 개체를 설정했습니다. – Jerome