2011-12-16 19 views
11

EF 4.0を使用するプロジェクトで作業しています。複数のエンティティがEntity Frameworkで同じプライマリキーを持つことがあります

Employeeテーブルには、システム内の新しい従業員を参照している従業員の従業員IDを含む列ReferEmployeeIDがあります。したがって、Employeeは自己参照テーブルです。

システムに追加されていない従業員が追加しようとしており、システム内の他の従業員も参照している場合は、その行をすべて追加する必要があります。まだ呼び出されていない保存

ActualEmployee、その後ReferEmployee.Employee = ActualEmployee

私は問題は両方の従業員が実際のことであることを理解し、参照するには、従業員IDが0に設定されているが、どのようにこの問題を回避来て。

答えて

18

、あなたはこれを行うことができ、あなたのデータベーステーブル内のEmployeeIDINT IDENTITYのように定義されると仮定すると:

// create two new employees - one refers to the other 
Employee john = new Employee { EmployeeID = -1, EmpName = "John" }; 
Employee peter = new Employee { EmployeeID = -2, EmpName = "Peter", ReferEmployeeID = -1 }; 

// add them to the EF model 
ctx.AddToEmployees(john); 
ctx.AddToEmployees(peter); 

// save changes 
ctx.SaveChanges(); 

だから、基本的には、「ダミー」EmployeeID値を使用して、あなたの新しい従業員を定義し、リンクを確立(Peter参照Johnここでは、その "ダミー" IDによって)。

SQL Serverにこれを保存し、Entity FrameworkのはとEFは、二人の従業員間のリンクを維持します(行を挿入するとき、SQL Serverが配る) リアル EmployeeID値を得るためのプロセスを処理します。

+1

私はこの回答を約2時間捜してきました。私はEFが(ダミーアイデンティティを使って)そのように働いていることは全く知りませんでした。それはどこに文書化されているのか、ありがとう! – Mike

+0

@Mike:わからない - Julie LermanとEFチームによる書籍、ブログ、イントロビデオを読んで、どこかでそれを選んだ –

関連する問題