实体框架不提取特定列

时间:2010-05-06 09:05:59

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

我试图从我的数据库中获取员工行。 Employee tabel引用了Job tabel。

现在我想用一些新信息更新Employee行。我将新信息放在新的Employee对象中,然后使用此对象更新数据库中的旧Employee信息。这很有用,直到我在Employee tabel和Job tabel之间添加了引用。

在此之后,Entity框架期望我的New Employee对象还包含需要更新的Jobs引用。但事实并非如此。当我创建新的Employee对象时,我没有关于Job引用的信息。因此,当我使用下面的代码时,我收到此错误:

* DELETE语句与REFERENCE约束“FK_EmployeeProjects_Employees”冲突。冲突发生在数据库“***”,表“dbo.EmployeeProjects”,列“EmployeeId”中。声明已经终止。*

public Employee EditEmployee(Employee employee)
    {
        try
        {
            var originalEmployee = GetEmployeeWithoutJobs(employee.Id);

            _entities.ApplyPropertyChanges(originalEmployee.EntityKey.EntitySetName, employee);

            _entities.SaveChanges();

            return originalEmployee;

        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

我可以以某种方式告诉实体框架忽略更新此示例中的Jobs引用吗?

1 个答案:

答案 0 :(得分:0)

我没有看到您在GetEmployeeWithoutJobs()方法中编写的代码,但我怀疑您需要在ObjectStateManager中包含作业引用。换句话说,你应该写这样的东西:

 var originalEmployee = (from e in context.EmployeeSet.Include("Jobs")
                           where e.Id = employeeId
                           select e).FirstOrDefault();

您应该使用ApplyCurrentValues()而不是过时的ApplyPropertyChanges()