最近、SQL Server 2008R2 バックエンドを使用する MVC3 アプリケーションの作業を開始しました。アプリケーションは、Web クエリからストリーミング データを受信し、新しいデータを受信したときにそのデータをテーブルに挿入します。アプリケーションは、すでに挿入されたデータを受信することがあります (受信されるデータには、事前に生成された主キーが含まれています - このキーは、アプリケーションが受信する前に生成されています) この場合、これをテーブルに挿入したくありませんすでに存在しているので。独自の主キーを生成できることはわかっていますが、データベースに重複する行は必要ありません。
私が考えることができる最も簡単な解決策は、各挿入で起動し、行が既に存在する場合は挿入を無視するテーブルの INSTEAD OF トリガーでした (私の考えでは、MVC アプリはレコードが挿入を試行する前にすでに存在していました)。
これは正常に機能していましたが、SQL Azure に移植すると、MVC が既に存在する行を挿入しようとするたびに、トリガーが機能していないかのように主キー違反エラーが発生するようになりました。SSMS で SQL Azure インスタンスに接続し、テーブルに既に存在するキーを使用して挿入を試みても、エラーは発生しないため、トリガーが存在し、機能していることがわかります。
MVC コードでは、データベースから生成した LINQ to SQL クラスと、これらのクラスの InsertOnSubmit メソッドを使用しています。
なぜこれが起こっているのか誰にも分かりますか?または、私が達成しようとしていることに対するより良い解決策を提案してください (おそらく、LINQ などでそれを行うためのより良い方法があると確信しています)。私は Azure、LINQ、および MVC にかなり慣れていないので、どんな提案も歓迎します!
前もって感謝します。
編集: トリガー コードは以下のとおりです。これは、ローカル SQL 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