mysql - Entity Framework - 插入相关表

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

我是 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/

相关文章:

PHP - mysql_insert_id() 和竞争条件?

php - 使用 datepicker jquery ajax php 更新 mysql 数据库字段

.net - 如何使用 .Net EF 从 MySql TinyInt(1) 列中读取大于 1 的值?

c# - 如何让EF高效调用聚合函数?

.net - 根据关联值过滤 EntityDataSource

mysql - 按两个不同表中两个日期时间字段的最大值排序

c# - SQL Server 中的货币

c# - EF4 POCO,我如何过滤ByXX?

linq-to-entities - Dynamic Linq .Select() - 如何处理某些空值

java - 如何将一组复选框值从一个 JSP 页面传递到另一个页面