实体框架 - 插入相关表

时间:2011-06-26 18:01:54

标签: mysql entity-framework-4 linq-to-entities

我是Entity Framework的新手,因此这个问题可能看起来有些小说。

我将尝试使用Department-Employee示例来解释我的场景我有两个表“Department”和“Employee”。部门有一个标识列DeptID。我正在尝试创建一个新部门并一次性添加新创建的Employees。以下是我的代码:

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()
}

但由于某种原因,记录没有插入。它在第二个插入查询中抛出错误。

以下是查询:

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()

它抛出的错误是在第二个查询的第4行。所以我猜这个身份有问题。我正在使用MySQL。

任何人都可以解释一下可能出现的问题吗?

编辑:我修改了SQL以适应这个例子。我无法提供真正的表格细节。

2 个答案:

答案 0 :(得分:0)

       'Name' /* @gp1 */

缺少一个近括号。我在这里添加了它。

       'Name' ) /* @gp1 */

答案 1 :(得分: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;
}

我有一个完整的项目,它依赖于Entity框架正确地将上面的内容映射到一个多对一的关系,并且我没有使用代码的问题,如图所示。