2009-06-09 5 views
0

J'ai un EntityObject nommé Pathway qui se rapporte directement aux données de la table de chemin. Ma base de données stocke également les règles pour les personnalisations Pathway. Ce que je voudrais faire est de créer un objet Pathway dans mon code qui est le résultat de Pathway + PathwayCustomisations. La résultante ne devrait jamais retrouver son chemin vers la base de données, c'est simplement une projection temporaire utilisée dans le code.Entités temporaires avec Entity Framework

public static Pathway ApplyCustomisation(Pathway p, ICollection<PathwayCustomisation> c) 
{ 
    Pathway resultant = new Pathway(); 
    if (!p.PathwayModule.IsLoaded) p.PathwayModule.Load(); 
    foreach (PathwayModule m in p.PathwayModule) 
    { 
     resultant.PathwayModule.Add(m); 
    } 
    foreach (PathwayCustomisation i in c) 
    { 
     switch (i.Command) 
     { 
      case "ADD": 
       resultant.PathwayModule.Add(i.PathwayModule); 
       break; 
      case "DELETE": 
       resultant.PathwayModule.Remove(i.PathwayModule); 
       break; 
     } 
    } 
    return resultant; 
} 

Cette méthode étrangle au premier obstacle parce que je suis d'ajouter des entités PathwayModule à une deuxième voie quand ils ne peuvent appartenir à un dans le modèle/base de données:

CoursePlanner.Test.PathwayTest.ApplyCustomisation: 
System.InvalidOperationException : Collection was modified; enumeration operation may not execute. 

est-il un moyen de travailler avec des projections d'entités facilement? Est-ce que j'approche le problème correctement?

Edit:

Je reçois toujours l'exception quand avec juste la première partie de la méthode:

public static Pathway ApplyCustomisation(Pathway p, ICollection<PathwayCustomisation> c) 
{ 
    Pathway resultant = new Pathway(); 
    if (!p.PathwayModule.IsLoaded) p.PathwayModule.Load(); 
    foreach (PathwayModule m in p.PathwayModule) 
    { 
     resultant.PathwayModule.Add(m); 
    } 
    return resultant; 
} 

L'énumération ci-dessus ne modifie la même collection qui est recensée, il ajoute simplement les articles à une deuxième collection. Ce code donne la même exception.

.NET3.5, C#, VS 2008 Express

Merci,

Daniel

Répondre

2

Votre exception est causée par le fait que vous modifing une collection tout en énumérant elle.

foreach (Item item in collection) 
{ 
    collection.Add(something); // Not allowed. 
    collection.Remove(something); // Not allowed, too. 
} 

Travailler avec des entités comme des objets normaux est pas de problème - vous ne devez éviter que les entités sont attachées à un contexte d'objet (directement ou indirectement par des entités liées) et ils ne sont pas conservées à la base de données.

+0

Je pensais que tout d'abord et je me rends compte que c'est un problème avec la méthode mais je reçois toujours l'exception avec seulement la première partie de la méthode (voir mon édition ci-dessus). Cette énumération ne modifie pas la même collection qui est en cours d'énumération, elle consiste simplement à ajouter les éléments à une seconde collection. Ce code donne la même exception. –

+0

Lors de la création du nouveau chemin résultant, je ne souhaite en aucun cas associer de façon permanente des PathwayModules au résultat ou modifier les Entités existantes et leurs relations de quelque manière que ce soit. –

+2

Je ne connais pas votre modèle, mais cela implique-t-il une relation de plusieurs à plusieurs? Ajouter quelque chose à une extrémité de la relalation changera aussi l'autre extrémité. –

Questions connexes