1

私のデータベースには、Employee と Address の 2 つのテーブルがあります。フォームでは、1 つのタブが両方のテーブルのフィールドを表します。OKボタンのクリックイベントの下で、データを挿入しようとしましたが、例外が発生しました。一度に 1 つのテーブルにデータを挿入できますが、両方は挿入できません。

私は例外があります:

「同じキーを持つオブジェクトが既に ObjectStateManager に存在します。既存のオブジェクトは Modified 状態です。オブジェクトは、Added 状態の場合にのみ ObjectStateManager に追加できます。」

私のコードは次のとおりです。

        try
        {

            using (TransactionScope ts = new TransactionScope())
            {
                db.Connection.Open();

                string empid = txtEmpId.Text.ToString();

                Employee emp = db.Employees.Single(a => a.Emp_ID == empid);

                emp.Full_Name = txtFullName.Text;

                db.AddToEmployees(emp);

                db.SaveChanges();

                Address address = db.Addresses.Single(b => b.Emp_Id == empid);

                address.House_No = txtHouseNo.Text.ToString();

                db.AddToAddresses(address);

                db.SaveChanges();


                ts.Complete();

                MessageBox.Show("completed successfully");
            }
        }

        catch (Exception e1)
        {
            MessageBox.Show(e1.Message);
        }

        finally
        {
            if (db.Connection.State == ConnectionState.Open)
            {
                db.Connection.Close();
            }
        }

助けてください!

4

2 に答える 2

1

投稿されたコードを見ると、データベースからアドレスを取得して更新し、それをデータベースに再度追加しようとしていますか?

レコードを 2 回挿入することはできないため、主キーの競合が発生します。

アドレスをデータベースに追加する行は既にそこにあるため、削除します。

于 2012-04-24T11:24:18.963 に答える
0

トランザクションを使用して、2つのテーブルに1つのSQLステートメントとして挿入できます。

取引例

于 2012-04-24T11:35:15.370 に答える