0

최근에 SQL Server 2008R2 백엔드가있는 MVC3 응용 프로그램에서 작업하기 시작했습니다. 응용 프로그램은 웹 쿼리에서 스트리밍 데이터를받은 다음 새 데이터를 수신 할 때 테이블에 데이터를 삽입합니다. 응용 프로그램은 때로는 이미 삽입 된 데이터를 수신 할 수 있습니다 (수신되는 데이터에는 미리 생성 된 기본 키가 포함되어 있습니다 -이 키는 응용 프로그램이 수신하기 전에 생성되었습니다).이 경우이 값을 테이블에 삽입하지 않으려합니다 그것이 이미 존재하기 때문에. 내 기본 키를 생성 할 수 있지만 데이터베이스에 중복 행이 필요하지 않음을 알았습니다.INSTEAD OF 트리거를 사용한 SQL Azure MVC3 기본 키 위반

내가 생각할 수있는 가장 쉬운 해결책은 각 삽입에 발생하는 테이블의 INSTEAD OF 트리거이며 행이 이미 존재하는 경우 삽입을 무시합니다 (내 생각은 MVC 앱이 다음을 확인해야한다는 것입니다). 삽입을 시도하기 전에 레코드가 이미 존재하는지 확인하십시오).

이것은 잘 작동했지만 SQL Azure로 이식 할 때 MVC가 트리거가 작동하지 않는 것처럼 이미 존재하는 행을 삽입하려고 할 때마다 기본 키 위반 오류가 발생합니다. SSMS에서 SQL Azure 인스턴스에 연결하고 테이블에 이미있는 키를 사용하여 삽입을 시도하면 아무런 오류 메시지도 나타나지 않으므로 트리거가 있고 작동하는지 알 수 있습니다.

MVC 코드에서 데이터베이스에서 생성 한 LINQ to SQL 클래스와 해당 클래스의 InsertOnSubmit 메서드를 사용하고 있습니다.

왜 이런 일이 일어날 지 알고 있습니까? 또는 대안으로 내가 얻으려고하는 것에 대해 더 나은 해결책을 제안하십시오 (나는 아마도 LINQ 등에서 그것을하는 더 좋은 방법이있을 것이라고 확신합니다). Azure, LINQ 및 MVC에 대한 새로운 소식을 전합니다.

미리 감사드립니다.

편집 : 트리거 코드가 아래에 있습니다 - 로컬 SQL DB에서 실행할 때 제대로 작동하고 있다고 말했고, Azure DB에서 이미 기존 기본 키를 사용하여 삽입을 시도하면 관리 스튜디오 그것은 잘 작동합니다. 오류는 Azure DB에 대해 실행중인 MVC 앱에서만 발생합니다. 오류는 응용 프로그램에서 발생하기 때문에

CREATE TRIGGER [dbo].[IO_Trig_INS_User] ON [dbo].[STRM_User] 
INSTEAD OF INSERT 
AS 
BEGIN 
SET NOCOUNT ON 
--Check for existing user. If there is no duplicate, do an insert. 
IF (NOT EXISTS (SELECT P.UserId 
     FROM dbo.STRM_User P, inserted I 
     WHERE P.UserId = I.UserId)) 
    INSERT INTO dbo.STRM_User 
     SELECT * 
     FROM inserted 
END 
GO 
+0

방아쇠를 보여 주시겠습니까? –

+0

암시 적 조인을 제거하면됩니다. 응. 그들이 더 나은 것으로 대체 된 지 20 년 후에 쓰는 변명의 여지가 없습니다. 그들은 Sql Anti 패턴입니다. http://www.amazon.com/gp/product/1934356557/ref=kinw_rke_tl_1 – HLGEM

+0

새로운 기능인 경우 LINQ to SQL을 사용하고 EF를 사용하지 않는 이유는 무엇입니까? EF vs L2S에 대해 1000 배 이상의 도움을 얻을 수 있습니다. - SQL 프로파일 링/추적 기능을 켜고 정확히 무슨 일이 벌어지는 지 확인할 수 없습니까? - retagging을 고려하십시오 - 순수한 SQL Azure 질문입니다. MVC는 무관합니다. – RickAndMSFT

답변

0

, 나는 정확히 무엇에 전송되는 참조 프로파일 것이다. 아마도 당신은 삽입 테이블에가는 생각 그것은을 보내는 경우 실제로.에서 무슨 일 아니다 동일한 테이블이지만 현재 테이블에없는 두 레코드의 일괄 처리는이 오류가 발생할 수 있습니다.

+0

나는 그것을했다 - 무엇이 보내지고 있는지 예상된다. SQL2008R2에서 실행하면 응용 프로그램이 제대로 작동하지만 Azure DB를 가리키면 오류가 발생합니다. –

관련 문제