2

私はDBファーストメソッドであるEF4.1とDbContextPOCOコード生成を使用しています。

私のデータベースには、以下に示すように多対多の関係があります。

従業員

従業員ID

従業員名

アカウント

アカウントID

アカウント名

EmployeeAccount

従業員ID

アカウントID

新しい従業員を挿入し、既存のアカウントを割り当てようとすると問題が発生するため、基本的に次のように実行します。

Employee emp = new Employee();
emp.EmployeeName = "Test";
emp.Accounts.Add(MethodThatLooksUpAccountByName("SomeAccountName"));

context.Employees.Add(emp);
context.SaveChanges();

これが(誤って)実行しているSQLは、新しい[Account]レコードを挿入しようとしていますが、これは制約違反で失敗しています。もちろん、新しい[Account]レコードを挿入するべきではなく、[Employee]を挿入した後にのみ新しい[EmployeeAccount]レコードを挿入する必要があります。

何かアドバイス?ありがとう。

4

1 に答える 1

1

MethodThatLooksUpAccountByNameこのメソッドは、アタッチされたオブジェクトまたはデタッチされたオブジェクトを返しますか?いずれの場合も、返されるオブジェクトをコンテキストにアタッチしようとすることができます。

Employee emp = new Employee();
emp.EmployeeName = "Test";
var acc = MethodThatLooksUpAccountByName("SomeAccountName");
context.Attach(acc); //I don't remember if it's attach or attachobject, but intellisense should help you there. 
emp.Accounts.Add(acc);

context.Employees.Add(emp);
context.SaveChanges();
于 2011-10-12T19:06:51.837 に答える