編集
私がコードに関して行っていたことはすべて正しかったのですが、テーブルに関係を間違って配置していました!
質問
タスクからメッセージまで 1 対 1 の関係があります。新しいアイテムを挿入すると、外部キー違反が発生します。
詳細:
DB構造
Task
ID (Primary Key, Guid, Default = NEWID())
MessageID (Unique Index with foreign key pointing to Message.ID)
Message
ID (Primary Key, Guid, Default = NEWID())
各テーブルの主キーの dbml 設定では、Auto Generate Value が設定されtrue
、Auto-Sync が設定されています。OnInsert
新しいオブジェクトを挿入する次のコードがあります
var objMessage = new Data.Message()
{
Body = "",
Subject = ""
};
Context.Messages.InsertOnSubmit(objMessage);
var objTask = new Data.Task()
{
Message = objMessage
};
Context.Tasks.InsertOnSubmit(objTask);
Context.SubmitChanges();
これにより、SQL エラーの外部キー制約違反がスローされます。
SQLプロファイリングは、linq to sqlがメッセージの前にタスクを挿入していることを示していますが、これはメッセージからのIDが必要なため実行できないため、もちろんこれにより外部キー違反が発生します。
これでどこが間違っているのですか?