2010-05-06 5 views
1

Je tente d'extraire une ligne employee de ma base de données. La tabelle Employee contient une référence à un onglet Job.Entity Framework ne récupère pas de colonne spécifique

Maintenant, je veux mettre à jour une ligne d'employés avec quelques nouvelles informations. Je place les nouvelles informations dans un nouvel objet Employé puis j'utilise cet objet pour mettre à jour les anciennes informations sur les employés dans la base de données. Cela a fonctionné très bien jusqu'à ce que j'ai ajouté la référence entre le tabel employé et le tabel de travail. Après cela, l'infrastructure Entity s'attend à ce que mon objet Nouvel employé contienne également des références de travail qui doivent être mises à jour. Mais ce n'est pas le cas. Lorsque je crée le nouvel objet employé, je n'ai pas les informations sur les références du travail. Donc quand j'utilise le code ci-dessous je reçois cette erreur:

* L'instruction DELETE était en conflit avec la contrainte REFERENCE "FK_EmployeeProjects_Employees". Le conflit s'est produit dans la base de données "***", dans la table "dbo.EmployeeProjects", dans la colonne "EmployeeId". L'instruction a été interrompue. *

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; 
     } 
    } 

Puis-je dire en quelque sorte le cadre de l'entité d'ignorer la mise à jour des références d'emploi dans cet exemple?

+0

'ApplyPropertyChanges' met à jour déjà que scalaires. Le bug est probablement dans 'GetEmployeeWithoutJobs'. Pouvez-vous publier cette source? –

Répondre

0

Je ne vois pas le code que vous avez écrit dans la méthode GetEmployeeWithoutJobs() mais je suppose que vous devez inclure les références de travail dans votre ObjectStateManager. En d'autres termes, vous devriez écrire quelque chose comme ceci:

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

Et vous devez utiliser ApplyCurrentValues() au lieu de obsolète ApplyPropertyChanges()

+0

c'est ainsi que la méthode semble déjà et ça ne marche pas. – Poku

Questions connexes