我是 Entity Framework 的新手,因此这个问题可能看起来有点菜鸟。
我将尝试用 Department-Employee 示例来解释我的场景 我有两个表“Department”和“Employee”。 Department 有一个标识列 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()
}
但由于某种原因,记录没有被插入。它在第二个插入查询中抛出错误。
下面是查询:
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 行。所以我猜 Identity 有问题。我正在使用 MySQL。
谁能解释一下哪里出了问题?
编辑:我修改了 SQL 以适应这个例子。我无法提供我的真实表格详细信息。
最佳答案
你们类(class)的结构是怎样的?我假设有一些小问题,EF 没有正确构建模型。
在手动定义 key 之前,我在使用 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 Framework ,并且我在使用代码时没有遇到任何问题,如图所示。
关于mysql - Entity Framework - 插入相关表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6485729/