実際のプロジェクトで使用する前に、Linq-to-SQLの理解を深めるために取り組んでいるので、ちょっとしたサイドプロジェクトで遊んでいます。DataContext.SubmitChanges()を介して更新しようとしているテーブルがありますが、主キーの制約が原因で失敗しています。
テーブル自体を制御することはできません(実際のID列を追加することはできません)。そのため、代わりに、3つの列を複合キーとして使用するようにLinqエンティティを変更しました。キーデータが更新セットとテーブル内の既存のデータの両方で一意であるにもかかわらず、挿入はまだ失敗しています。その理由を知りたいと思います。Linqがこれらの値を非一意として扱うように強制する何が欠けていますか?
更新の問題自体を解決しようとしているのではないことに注意してください。私の状況では、DataContext.ExecuteCommand()も同様に機能すると判断しました。Linq(または私のデータ)の理解が間違っているところを探そうとしています。
テーブル構造は次のようになります。OPRID(char(30))DATE(DateTime)PROJECT_ID(char(15))HOURS(decimal)
最後の3列は複雑なキーです。
カンマ区切りのサンプルデータを次に示します:cschlege、2009-1-5、10100、0.8 cschlege、2009-1-5、10088、1.1 cschlege、2009-1-5、10099、0.8 cschlege、2009-1-5、 10088、1.2
SubmitChanges()は、これらの行の最後で一貫して失敗しますが、DATE、PROJECT_ID、HOURSのキーを指定すると、これらの行は一意である必要があります。HOURS列に重複がある3行目では失敗しませんが、重複するPROJECT_IDに達した場合にのみ失敗します。ただし、複合キーからPROJECT_IDを削除すると、3行目で挿入が失敗します。
LINQがこれらの行を一意のキーとして扱わないのはなぜですか?