Linq 实体框架不获取特定列

Linq 实体框架不获取特定列,linq,entity-framework,linq-to-entities,Linq,Entity Framework,Linq To Entities,我正在尝试从我的数据库中获取员工行。Employee选项卡具有对Job选项卡的引用 现在我想用一些新信息更新员工行。我将新信息放入一个新的Employee对象中,然后使用该对象更新数据库中的旧员工信息。这非常有效,直到我在Employee选项卡和Job选项卡之间添加了引用 在此之后,实体框架期望我的新Employee对象还包含需要更新的作业引用。但事实并非如此。当我创建新的Employee对象时,我没有关于职务引用的信息。因此,当我使用下面的代码时,会出现以下错误: *DELETE语句与引用约束

我正在尝试从我的数据库中获取员工行。Employee选项卡具有对Job选项卡的引用

现在我想用一些新信息更新员工行。我将新信息放入一个新的Employee对象中,然后使用该对象更新数据库中的旧员工信息。这非常有效,直到我在Employee选项卡和Job选项卡之间添加了引用

在此之后,实体框架期望我的新Employee对象还包含需要更新的作业引用。但事实并非如此。当我创建新的Employee对象时,我没有关于职务引用的信息。因此,当我使用下面的代码时,会出现以下错误:

*DELETE语句与引用约束“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;
        }
    }

我可以告诉实体框架忽略更新本例中的作业引用吗?

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

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

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

ApplyPropertyChanges
已经只更新了标量。该错误可能在
GetEmployeeWithoutJobs
中。你能发布那个消息来源吗?