我是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以适应这个例子。我无法提供真正的表格细节。
答案 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框架正确地将上面的内容映射到一个多对一的关系,并且我没有使用代码的问题,如图所示。