J'essaie de créer une méthode sur un référentiel EF 4 POCO appelé AddOrUpdate. L'idée est que la couche de gestion peut transmettre un objet POCO et que l'infrastructure de persistance ajoute l'objet s'il est nouveau (pas encore dans la base de données), sinon la base de données sera mise à jour (une fois SaveChanges() avec la nouvelle valeur. Ceci est similaire à d'autres questions que j'ai posées sur EF, mais je ne suis qu'environ 80% à comprendre cela, alors s'il vous plaît pardonner la duplication partielle. La partie qui me manque est comment mettre à jour le graphe d'objet dans mon objet ObjectContext/associé pour l'objet métier transmis une fois que j'ai déterminé que l'objet métier existe déjà dans la base de données (et qu'il a été chargé) merci à TryGetObjectByKey). ApplyCurrentValues ressemble un peu à ce que je veux, mais il ne copie que les valeurs scalaires et ne semble pas destiné à mettre à jour le graphe d'objet dans ObjectContext/ObjectSet. En raison de mon cas d'utilisation particulier, je ne me soucie pas de la concurrence en ce moment.EF 4, POCO et AddOrUpdate
public void AddOrUpdate(BO biz)
{
object obj;
EntityKey ek = Ctx.CreateEntityKey(mySetName, biz);
bool found = Ctx.TryGetObjectByKey(ek, out obj);
if (found)
{
// How do I do what this method name implies? Biz is a parent with children.
mySet.TellTheSetToUpdateThisObject(biz);
}
else
{
mySet.AddObject(biz);
}
Ctx.DetectChanges();
}
@Craig: Donc si je charge un parent POCO qui a des enfants (et peut-être des petits-enfants, etc.) via EF 4, change certains objets enfants (modifie ceux existants, en ajoute de nouveaux, supprime), je dois manuellement mettre à jour le graphe d'objet dans ObjectContext? –
Non. Si vous chargez à partir du contexte et que les entités effectuent une certaine forme de suivi des modifications, ceci est automatique. Ce n'est que lorsque vous copiez à partir d'une entité déconnectée que vous êtes seul. –
@Craig: J'ai chargé le contexte à l'origine, mais j'ai constaté que mes modifications n'étaient pas appliquées à l'appel de SaveChanges(). Quel suivi des modifications un objet POCO doit-il effectuer? Et s'il doit implémenter un mécanisme de suivi des modifications, est-ce encore un objet POCO? –