2010-05-11 2 views
9

Lecture de cet article MSDN intitulé "Utilisation de ObjectSet (Entity Framework)" Il montre deux exemples sur la façon d'ajouter un produit .. un pour 3.5 et un autre pour 4.0.3 méthodes pour ajouter un "produit" à travers Entity Framework. Quelle est la différence?

http://msdn.microsoft.com/en-us/library/ee473442.aspx

Par mon manque de connaissances que je suis quelque chose peut-être complètement absent ici, mais je ne ai jamais ajouté un produit similaire à ceci:

//In .NET Framework 3.5 SP1, use the following code: (ObjectQuery) 
    using (AdventureWorksEntities context = new AdventureWorksEntities()) 
    { 
     // Add the new object to the context. 
     context.AddObject("Products", newProduct); 
    } 

    //New in .NET Framework 4, use the following code: (ObjectSet) 
    using (AdventureWorksEntities context = new AdventureWorksEntities()) 
    { 
     // Add the new object to the context. 
     context.Products.AddObject(newProduct); 
    } 

Je ne l'aurais pas fait de toute façon et juste utilisé:

// (My familiar way) 
    using (AdventureWorksEntities context = new AdventureWorksEntities()) 
    { 
     // Add the new object to the context. 
     context.AddToProducts(newProduct); 
    } 

Quelle est la différence entre ces trois façons?

Est-ce que "My way" est une autre façon d'utiliser une ObjectQuery?

Merci, Kohan

Répondre

9

Tous font la même chose, avec des différences mineures dans la syntaxe. Tout d'abord, regardons la façon 3.5 et «votre chemin». Si vous regardez le fichier codegen pour votre EDMX, vous verrez quelque chose comme:

public void AddToProducts(Product product) 
    { 
     base.AddObject("Products", product); 
    } 

Ainsi, ces deux méthodes sont exactement les mêmes, sauf que la chaîne magique dans votre code est remplacé par une version codegened qui peut ne jamais avoir tort.

Le ".NET 4 way" fait la même chose, mais fait différemment. Il utilise le ObjectSet<T> fortement typé, qui vous permet de créer dynamiquement une référence fortement typée mais sans utiliser de chaînes. Cependant, dans le cas de l'ajout d'un objet à un contexte, il n'y a pas un réel avantage que je connaisse, sauf qu'il vous permet d'être plus cohérent sur la façon dont vous référencez vos entités - vous les lisez du contexte en utilisant la même propriété (Context.Products) que vous utilisez pour les écrire.

+0

Les ObjectSets sont mis en cache dans le générateur de code par défaut. Donc je suppose qu'il y a un léger gain de perf à utiliser context.Products.Add car il sera capable de réutiliser le même ensemble sans aucune recherche. –

+0

Excellent. Merci beaucoup de m'avoir expliqué cela. Il s'est avéré être beaucoup plus simple que je l'avais imaginé. Je devrais vraiment creuser dans un contrôle tous ces fichiers générés plus souvent pour une meilleure compréhension de ce qui se passe dans les coulisses. Je vais jeter un coup d'oeil maintenant et voir quelles autres choses se passent! – 4imble

+0

Il vaut vraiment la peine de lire le fichier codegen. Vous utilisez ce code tout le temps, même si vous ne l'écrivez pas. –

Questions connexes