0

編集

私がコードに関して行っていたことはすべて正しかったのですが、テーブルに関係を間違って配置していました!

質問

タスクからメッセージまで 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が必要なため実行できないため、もちろんこれにより外部キー違反が発生します。

これでどこが間違っているのですか?

4

2 に答える 2

2

私が見ることができる問題は最初のものInsertOnSubmitです。関連テーブルに追加したい場合は、最初のInsertOnSubmit. メインオブジェクトを挿入すると、子オブジェクトもその外部キーとともに挿入されるためです。

次のようにできると思います:

var objTask = new Data.Task()
    {
        Message = new Data.Message()
                {
                    Body = "",
                    Subject = ""
                }
    };
    Context.Tasks.InsertOnSubmit(objTask);
    Context.SubmitChanges();
于 2013-02-28T13:20:46.707 に答える
0

これを試してください:

var objMessage = new Data.Message()
{
    Body = "",
    Subject = ""
};
Context.Messages.InsertOnSubmit(objMessage);
Context.SubmitChanges();

var objTask = new Data.Task()
{
    Message = objMessage
};

Context.Tasks.InsertOnSubmit(objTask);
Context.SubmitChanges();

新しいレコードを使用する前に SubmitChanges する必要があります

于 2013-02-28T13:18:38.257 に答える