J'ai travaillé avec Entity Framework 4 récemment, et je suis un peu confus quant à savoir quand utiliser ObjectSet.Joindre, et ObjectSet.AddObject.
De ma compréhension:
- L'utilisation "d'Attacher" lorsqu'une Entité existe déjà dans le système
- Utiliser "AddObject" lors de la création d'une Entité nouvelle
Donc, si je suis en création d'une nouvelle Personne, je le fais.
var ctx = new MyEntities();
var newPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.AddObject(newPerson);
ctx.SaveChanges();
Si je suis à la modification d'une Personne, je fais ceci:
var ctx = new MyEntities();
var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" };
existingPerson.Name = "Joe Briggs";
ctx.SaveChanges();
Gardez à l'esprit, c'est un très simple exemple. En réalité, je suis à l'aide de Pure POCO (pas de génération de code), un modèle de Référentiel (ne pas traiter avec des ctx.Personnes), et l'Unité de Travail (ne pas traiter avec des ctx.SaveChanges). Mais "sous les couvertures", le ci-dessus est ce qui se passe dans ma mise en œuvre.
Maintenant, ma question - je suis encore à trouver un scénario où j'ai eu à utiliser les Joindre.
Ce qui me manque ici? Quand faut-il utiliser Joindre?
MODIFIER
Juste pour préciser, je suis à la recherche d' exemples d'utilisation de Joindre plus de AddObject (ou vice-versa).
EDIT 2
Ci-dessous la réponse est correcte (j'ai accepté), mais j'ai pensé ajouter un autre exemple où Attacher serait utile.
Dans mon exemple ci-dessus pour la modification d'une Personne existante, deux requêtes sont effectivement en cours d'exécution.
De retrouver la Personne.SingleOrDefault), et un autre pour effectuer la mise à JOUR (.SaveChanges).
Si (pour certaines raisons), je savais déjà que "jean Dupont" existait dans le système, pourquoi faire une requête supplémentaire pour obtenir de lui la première? Je pourrais faire ceci:
var ctx = new MyEntities();
var existingPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.Attach(existingPerson);
ctx.SaveChanges();
Le résultat sera juste une mise à JOUR instruction en cours d'exécution.