2012-04-05 2 views
0

SQL Server 2008 R2의 테이블에서 일부 변경을 수행하는 ASP.NET 웹 응용 프로그램이 있습니다. 이 테이블에는 동일한 데이터베이스 서버의 다른 데이터베이스에있는 다른 테이블에 대한 업데이트를 수행하는 트리거가 있습니다.엔터티 프레임 워크가 다른 데이터베이스에 대한 트리거를 활성화합니다. 오류

변경 사항을 저장하면 다음 오류가 발생합니다. - 오류 메시지 : 기본 제공 업체에서 커밋에 실패했습니다. - InnerException :이 SqlTransaction이 완료되었습니다. 더 이상 사용할 수 없습니다.

또한 데이터베이스 사용자가 다른 데이터베이스에 연결할 수 있도록 허용하지 않습니다.

누군가 내가이 작업을 어떻게 할 수 있는지 알고 있습니까?

+3

1 단계 -이 방아쇠를 설치하고 상처를 입은 사람을 찾습니다. 트리거는 외부 리소스에 액세스하지 않아야합니다.이 경우 다른 데이터베이스는 동일한 인스턴스에 있어도 외부 리소스입니다. –

+0

1 단계 완료. 데이터베이스를 동기화 상태로 유지하는 가장 좋은 방법은 무엇입니까? MS Sync 프레임 워크 또는 복제 서비스? – JurgenStillaert

+0

데이터베이스를 동기화하는 중이면 예, 일종의 복제가 표시 될 수 있습니다. 관련 데이터를 업데이트/감사하는 경우 서비스 브로커와 같은 것을 고려할 수 있습니다. –

답변

0

트리거는 Entity Framework와 관련이 없습니다.

트리거가 변경된 곳과 관계없이 표가 변경되면 트리거가 실행됩니다.

아마도이 권한 문제 일 수 있습니다. 시스템은 첫 번째 데이터베이스에 연결하는 데 사용 된 보안 컨텍스트를 사용하여 두 번째 데이터베이스를 변경하려고 시도하고 있습니다. 트리거로 인한 변경이 실패하면 동일한 트랜잭션의 모든 항목이 실패합니다.

트랜잭션에서 2 개의 데이터베이스에 액세스하고 있으므로 MSDTC를 사용하고 있고 트랜잭션이 시작되었고 권한이 있는지 확인하십시오.

관련 문제