2014-05-12 1 views
0

Par le passé, j'ai appris à utiliser DbSet<TEntity>.Create() pour créer des objets d'entité à insérer. Cependant, j'ai trouvé juste en utilisant le constructeur par défaut avec un initialiseur d'objet semble fonctionner aussi bien.Création d'objets d'entité pour insertion dans Entity Framework 6

Ma principale question est de savoir si nous devons toujours utiliser DbSet<TEntity>.Create(), et pourquoi? Question de bonus: Quelle est, le cas échéant, la différence fonctionnelle entre ces deux exemples de code?

« par le livre »:

Dim db As New EFDAL.WidgetDbEntities() 
    Dim dbWidgetBatch2 As EFDAL.WidgetBatch = db.WidgetBatches.Create() 
    dbWidgetBatch2.CreationTimestamp = Now 
    dbWidgetBatch2.CreatedByUsername = userName 
    db.WidgetBatches.Add(dbWidgetBatch2) 
    db.SaveChanges() 

« fonctionne aussi bien? »:

Dim db As New EFDAL.WidgetDbEntities() 
    Dim dbWidgetBatch As New EFDAL.WidgetBatch With { 
     .CreationTimestamp = Now, 
     .CreatedByUsername = userName 
    } 
    db.WidgetBatches.Add(dbWidgetBatch) 
    db.SaveChanges() 
+0

en double de http://stackoverflow.com/questions/7311949/ramifications-of- dbset-create-versus-new-entity –

+0

J'ai cherché, honnête! – pseudocoder

Répondre

0

Après avoir examiné le candidat en double, je vois le principal sujet de cette question a déjà été couvert. Cependant, je pense qu'il vaut la peine de résumer comment les concepts s'appliquent à ma question. Si je comprends bien, la réponse courte est que DbSet.Create() crée un objet "proxié" qui permet, entre autres choses, un chargement paresseux des propriétés de navigation. Dans les exemples que j'ai publiés, aucune propriété de navigation n'a été utilisée. Les deux exemples fonctionnent donc de manière équivalente, et pour la plupart des insertions, je suppose que la plupart des gens n'auront pas besoin d'un objet mandaté.

Liens:

+0

Une alternative à l'utilisation de 'DbSet.Create()' est d'utiliser 'Entry (modèle) .Reference (o => MyRef) .Load()' après 'model' a été ajouté au contexte DB. Par exemple: si 'model.MyRefId' a une valeur alors l'entité correspondante de' model.MyRef' sera chargée. Je trouve cela utile lorsque vous travaillez avec des applications ASP.NET MVC et le classeur de modèle prêt à l'emploi. –

Questions connexes