2010-04-29 6 views
4

Mon modèle d'entité est le suivant: Personne, magasin et PersonStores Tableau enfant plusieurs à stocker PeronId, StoreId Lorsque je reçois une personne comme dans le code ci-dessous , et essayez de supprimer tous les StoreLocations, il les supprime de PersonStores comme mentionné mais le supprime également de la table de magasin qui n'est pas souhaitable. De même si j'ai une autre personne qui a le même id de magasin, alors il échoue en disant "The DELETE statement conflicted with the REFERENCE constraint \"FK_PersonStores_StoreLocations\". The conflict occurred in database \"EFMapping2\", table \"dbo.PersonStores\", column 'StoreId'.\r\nThe statement has been terminated" comme il essayait de supprimer le StoreId mais que StoreId a été utilisé pour un autre PeronId et donc l'exception levée.EF 4.0 - Relation plusieurs à plusieurs - problème avec les suppressions

Person p = null; 
     using (ClassLibrary1.Entities context = new ClassLibrary1.Entities()) 
     { 
      p = context.People.Where(x=> x.PersonId == 11).FirstOrDefault(); 
      List<StoreLocation> locations = p.StoreLocations.ToList(); 
      foreach (var item in locations) 
      { 
       context.Attach(item); 
       context.DeleteObject(item); 
       context.SaveChanges(); 
      } 
     } 

Répondre

10

Le problème est que vous ne voulez pas vraiment supprimer le magasin se, juste la relation entre le magasin et la personne. Essayez quelque chose comme ceci:

Person p = null; 
using (ClassLibrary1.Entities context = new ClassLibrary1.Entities()) 
{ 
    p = context.People.Where(x=> x.PersonId == 11).FirstOrDefault(); 
    p.StoreLocations.Clear(); 
    context.SaveChanges(); 
} 

qui permettra à votre personne, supprimer tous les magasins de sa liste des magasins, et enregistrer les modifications. Notez que vous pouvez avoir besoin d'une instruction include sur la première ligne du bloc using, en fonction de la configuration de votre ObjectContext.

+0

qui semblait avoir résolu le problème !! – chugh97

+0

Merci de ma part aussi! J'ai lutté avec cela et .Clear a résolu le problème. – willem

Questions connexes