2010-05-06 2 views
1

Im пытается получить строку сотрудника из моей базы данных. В столбце Employee есть ссылка на вкладку Job.Entity Framework не извлекает определенный столбец

Теперь я хочу обновить строку Employee некоторой новой информацией. Я помещаю новую информацию в новый объект Employee, а затем использую этот объект для обновления старой информации Сотрудника в базе данных. Это отлично работало, пока я не добавил ссылку между таблицей Employee и вкладкой Job.

После этого инфраструктура Entity ожидает, что мой объект New Employee также содержит ссылки на рабочие места, которые необходимо обновить. Но это не так. Когда я создаю новый объект Employee, у меня нет информации о ссылках на работу. Поэтому, когда я использую код ниже, я получаю эту ошибку:

* Оператор 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'. Можете ли вы опубликовать этот источник? –

ответ

0

Я не вижу кода, который вы написали внутри метода GetEmployeeWithoutJobs(), но я подозреваю, что вам нужно включить ссылки на задания в ObjectStateManager. Другими словами, вы должны написать что-то вроде этого:

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

И вы должны использовать ApplyCurrentValues() вместо устаревшего ApplyPropertyChanges()

+0

Вот как выглядит метод allready и что does'nt работает. – Poku

Смежные вопросы