2010-08-30 4 views
0

du problème est, il semble que lorsque j'utilise le code ci-dessous pour affecter les valeurs d'emplacement obtenues à partir d'une zone de liste à la division en cours de création/sous la direction EF crée un nouvel emplacement et entre alors que les emplacements ID et les divisions est en la table DivisionLocation créant ainsi plusieurs emplacements inutilement, comme illustré ci-dessous.Entity Framework 1.0 question

using (FRLEntities context = new FRLEntities()) 
{ 
    for (int i = 0; i < lstPicked.Items.Count; i++) 
    { 
     var lpn = cm.GetLocation(Convert.ToInt32(lstPicked.Items[i].Value)); 
     Location cLocation = new Location { LocationId = Convert.ToInt32(lstPicked.Items[i].Value), LocationName = lstPicked.Items[i].Text, LocationParentName = lpn.LocationParentName }; 
     //CurrentDivision.Location = new EntityCollection<Location>(); 
     CurrentDivision.Location.Add(cLocation); 
    } 
} 

Certaines données

Division 
Divisionid   DevisionName 
1     1st Division 
2     2st Division 

Location 
LocationId   LocationName 
1     HG 
2     FG 
3     IK 
4     HG 
5     FG 

DivisionLocation 
DivisionId   LocationId 
1     1 
1     3 
2     1 
2     2 
2     4 
1     5 

Merci à l'avance

Répondre

1

Il est problème commun. Vous avez créé l'instance Location dans le code et vous ne l'avez pas chargé à partir du contexte EF. Ainsi, l'emplacement de localisation n'est pas lié au contexte actuel et lorsque vous ajoutez une nouvelle propriété CurrentDivision au contexte, tous les emplacements associés sont également considérés comme de nouveaux objets.

Si vous voulez éviter cela, vous devez dire en quelque sorte le contexte de EF quels emplacements sont nouveaux et qui sont existants. J'utilise cette approche:

context.ObjectStateManager.ChangeObjectState(lpn, EntityState.Unchagned);