キー(LocumID
) - 値(AvailableDate
)を保持するテーブルがあります。テーブルにはそれ自身のプライマーがあります。キー/値を繰り返すことはできませんので、LocumID & AvailableDate
に一意の複合制約を追加しました。Linq-2-SQLコンテキストのSQLクエリの優先順位
OID LocumID AvailableDate AvailabilityStatusID
-------------------- -------------------- ----------------------- --------------------
1 1 2009-03-02 00:00:00 1
2 2 2009-03-04 00:00:00 1
3 1 2009-03-05 00:00:00 1
4 1 2009-03-06 00:00:00 1
5 2 2009-03-07 00:00:00 1
6 7 2009-03-09 00:00:00 1
7 1 2009-03-11 00:00:00 1
8 1 2009-03-12 00:00:00 2
9 1 2009-03-14 00:00:00 1
10 1 2009-03-16 00:00:00 1
は今、本当の使用時に、私は単にLocumID-AvailableDateペアの古い値(複数可)を排除し、新しいものを挿入することは最善のアプローチであることがわかります。しかしLinq-to-SQLでは、最後にDbContext.SubmitChanges()
を呼び出しています。これは、SQL Serverがその文が制約と競合していると不平を言って例外をスローする場所です。
私は自分のコードラインをチェックすると、まず既存のペアを削除して、新しいものを作成して挿入します。このトランザクションで制約が違反しているのはなぜですか?
また、既存のペアを最初に削除した場合は、SubmitChanges
を作成してから新しいペアを作成して挿入してください。SubmitChanges
...すべてがうまくいきます。
しかし、私は完全なトランザクションの利点を失います。
アイデア?よろしく。
問題のSQLを表示できるようにDataContextに.Logプロパティを設定しましたか?それも同様に投稿するのに役立つかもしれません。 – mattmc3
正確なエラーはどうですか? – gbn
私はなぜそれらの質問をしているのか分かりません。問題は明らかです:Linq2Sqlは、削除の前に挿入を実行します。 –