2010-05-06 53 views
1

我試圖從我的數據庫中提取僱員行。員工表格有對作業表格的引用。實體框架不提取特定列

現在我想用一些新的信息更新員工行。我把新的信息放在一個新的Employee對象中,然後使用這個對象來更新數據庫中舊的Employee信息。直到我在Employee tabel和Job tabel之間添加了引用,這個工作很好。

之後,實體框架期望我的新員工對象還包含需要更新的作業引用。但事實並非如此。當我創建新的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; 
     } 
    } 

我可以通過某種方式告訴實體框架忽略更新此示例中的作業引用嗎?

+0

'ApplyPropertyChanges'已經更新只標量。該錯誤可能在'GetEmployeeWithoutJobs'中。你可以發佈該源? – 2010-05-06 13:14:58

回答

0

我沒有看到您在GetEmployeeWithoutJobs()方法中編寫的代碼,但我懷疑您需要在您的ObjectStateManager中包含作業引用。換句話說,你應該寫這樣的事情:

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

而且你應該使用ApplyCurrentValues(),而不是過時ApplyPropertyChanges()

+0

這就是該方法看起來是多麼的準備,而且不起作用。 – Poku 2010-05-06 09:23:47