2011-06-26 17 views
1

私はEntity Frameworkを初めて使用しています。したがって、この質問はちょっと嫌なことかもしれません。Entity Framework - 関連テーブルへの挿入

私は、Department-Employeeの例で私のシナリオを説明しようとします。私は2つのテーブル "Department"と "Employee"を持っています。部門にはID列DeptIDがあります。私は新しい部署を作り、新しく作成された従業員を一気にすべて追加しようとしています。以下は私のコードです:

using (MyDB context = new MyDB()) 
{ 
Department dept = new Department(); 
dept.Name = "My Department"; 

Employee emp = new Employee(); 
emp.Name = "Emp Name"; 
emp.Department = dept; //Tried dept.Employees.Add(emp) also, same result 
context.AddObject("Department", dept); 
context.SaveChanges() 
} 

しかし、何らかの理由でレコードが挿入されません。 2番目の挿入クエリでエラーが発生します。

INSERT INTO Department 
      (Name) 
VALUES  ('Dept1' /* @gp1 */); 
SELECT ID 
FROM Department 
WHERE row_count() > 0 
AND `ID` = last_insert_id() 


-------------------------- 
INSERT INTO Employee 
      (DeptID, 
      Name) 
VALUES  (19, 
      'Name'); /* @gp1 */ 
SELECT id 
FROM Employee 
WHERE row_count() > 0 
AND `id` = last_insert_id() 

がスローエラーが2番目の問合せの行4にある:

は、以下のクエリです。だからアイデンティティのことが何か間違っていると推測している。私はMySQLを使用しています。

誰でも間違っていると説明できますか?

編集:この例に合わせてSQLを変更しました。私は実際のテーブルの詳細を与えることはできません。

答えて

0

あなたのクラスの構造は何ですか?私は若干間違っていると思いますが、EFはモデルを正しく構築していません。

また、手動でキーを定義するまで、EF4.1にいくつか問題がありました。どの変数があなたのキーであるかを '仮定'しているEFの部分は、基本クラスから派生したオブジェクトのような複雑なオブジェクトでは動作しないように見えますが、他のケースでは失敗します。ここで

は、私はあなたのコードが見えるように期待するものです。

public class Department 
{ 
    [Key] 
    public Int64 DepartmentId { get; set;} 

    public String Name { get; set;} 
} 

public class Employee 
{ 
    [Key] 
    public Int64 EmployeeId { get; set;} 

    public String Name { get; set;} 

    //Adding virtual here allows lazy loading of department 
    public virtual Department Department {get; set;} 
} 


public class MyDatabase : DbContext 
{ 
    DbSet<Department> Departments; 
    DbSet<Employee> Employees; 
} 

私は正確に一つの関係に多くの中に上記のマッピングエンティティフレームワークに依存している職場で、プロジェクト全体を持っていると私が持っていました表示されているようにコードを使用することはありません。

+0

私はこれも私の元の投稿でこれを言及していたはずですが、私はしませんでした:(私の悪い、私は自己追跡エンティティを使用しています。私のモデルで[Key]属性は表示されませんが、Keyがedmx(XML)で正しく定義されていることがわかります。これらの3つのプロジェクトで別々のプロジェクトを試してみたいと思います – Vinod

+0

問題が何であったかわかりましたテーブルの中に「Condition」という名前の列がありましたが、これはMySQLのキーワードになります:-( – Vinod

0
 'Name' /* @gp1 */ 

にはかっこがありません。私はここにそれを追加しました。

 'Name') /* @gp1 */ 
+0

こんにちは、返信ありがとうございます。私は、SQLがEFによって生成され、この例に合うようにSQLを修正したことを忘れていました。私は実際のテーブルの詳細を与えることはできません。括弧が欠けているということは、質問を掲示している間は全く間違いです。今投稿を編集中... – Vinod

+0

ステートメントの間に2つのセミコロンがありません。 –

+0

EFプロファイラを使用して生成されたクエリを表示しています。私は奇妙なセミコロンを見ません-___- – Vinod

関連する問題