Entity Framework 4, des objets POCO et ASP.Net MVC2. J'ai une relation plusieurs-à-plusieurs, disons entre le Blog et le Tag entités. Cela signifie que, dans mon T4 généré POCO article sur le Blog de la classe, j'ai:
public virtual ICollection<Tag> Tags {
// getter and setter with the magic FixupCollection
}
private ICollection<Tag> _tags;
Je demande un billet de Blog et les Tags à partir d'une instance de la ObjectContext et de l'envoyer à une autre couche (Afficher dans l'application MVC). Plus tard, j'ai récupérer la mise à jour du Blog avec les modifications des propriétés et changé relations. Par exemple, il avait des balises "A", "B" et "C", et les nouvelles balises sont des "C" et "D". Dans mon exemple il n'y a pas de nouveaux Tags et les propriétés des Balises de ne jamais changer, de sorte que la seule chose qui doit être enregistré est l'évolution des relations. Maintenant, j'ai besoin de le sauvegarder dans un autre ObjectContext. (Mise à jour: Maintenant, j'ai essayé de faire dans le même contexte d'instance et aussi échoué.)
Le problème: je ne peux pas le faire enregistrer les relations correctement. J'ai essayé tout ce que j'ai trouvé:
- Le contrôleur.UpdateModel et de Contrôleur.Tryupdatemodel pour mettre ne fonctionnent pas.
- L'obtention de l'ancien article sur le Blog à partir du contexte puis de modifier la collection ne fonctionne pas. (avec les différentes méthodes de le point suivant)
- Ce serait probablement le travail, mais j'espère que c'est juste une solution de contournement, pas de la solution :(.
- Essayé de Joindre/Ajouter/ChangeObjectState fonctions pour l'article sur le Blog et/ou des Balises dans toutes les combinaisons possibles. A échoué.
- Cela ressemble à ce que j'ai besoin, mais il ne fonctionne pas (j'ai essayé de réparer, mais ne peut pas pour mon problème).
- Essayé ChangeState/Ajouter/Attach/... la relation des objets du contexte. A échoué.
"Ne pas travailler" signifie dans la plupart des cas que j'ai travaillé sur la "solution" jusqu'à ce qu'il ne produit pas d'erreurs et permet d'économiser au moins les propriétés de billet de Blog. Ce qui se passe avec les relations varie: habituellement, les Balises sont ajoutés de nouveau à la Balise table avec le nouveau PKs et sauvés article sur le Blog des références à ceux-ci et pas celle d'origine. Bien sûr, le retour des Balises PKs, et avant de les enregistrer/mettre à jour les méthodes d'-je vérifier le PKs et ils sont égaux à ceux de la base de données donc probablement EF pense qu'ils sont de nouveaux objets, et de les PKs sont le temp.
Un problème que je connaissent et qui peuvent faire qu'il est impossible de trouver un système automatisé de solution simple: Lorsqu'un POCO de l'objet de collection est modifié, ce qui devrait passer par le ci-dessus mentionné collection virtuelle de la propriété, parce qu'alors la FixupCollection astuce permettra de mettre à jour l'inverse des références sur l'autre extrémité de la plusieurs-à-plusieurs relations. Cependant lors d'un point de Vue "renvoie" une mise à jour du Blog de l'objet, qui n'est pas arrivé. Cela signifie que peut-être il n'y a pas de solution simple à mon problème, mais ça me ferait vraiment très triste et je déteste le EF4-POCO-MVC triomphe :(. Aussi, cela voudrait dire que EF ne peut pas le faire dans le MVC de l'environnement selon la EF4 types d'objets sont utilisés :(. Je pense que l'instantané en fonction de suivi des modifications devraient savoir que le changement de billet de Blog a des relations, à des Étiquettes existantes PKs.
Btw: je pense que le même problème se produit avec un-à-plusieurs relations (google et mon collègue le dire). Je vais l'essayer à la maison, mais même si c'œuvres qui ne m'aide pas dans mes six plusieurs-à-plusieurs liens dans mon application :(.