Question

J'ai les colonnes suivantes dans ma table

  • id (int)
  • Nom (NvarchaRar) Généralement <100 caractères
  • Data (Nvarchar) Moyenne de 1 Mo

    J'écris un programme qui passera à chaque rangée et effectuera certaines opérations dans le champ Nom.Puisque je n'utilise que le champ Nom et que le champ de données est très important, est-il possible de diriger EF pour charger uniquement le champ ID et Nom?

Était-ce utile?

La solution

sûr est

ctx.YourDbSet.Select(p=> new { Id = p.Id, Name = p.Name});

Cette méthode sélectionne dans une classe anonyme.

Si vous voulez sauvegarder cela à nouveau, vous pouvez le faire avec quelque chose que j'appelle une entité factice:

foreach(var thing in ctx.YourDbSet.Select(p=> new { Id = p.Id, Name = p.Name}))
{
    var dummy = new YourEntity{Id = thing.Id};
    ctx.YourDbSet.Attach(dummy);
    dummy.Name = thing.Name + "_";
}
ctx.SaveChanges();

Cette méthode fonctionne avec le suivi de l'instantané lorsque EF piste uniquement les modifications apportées après l'appel de jointe à renvoyer dans l'instruction de mise à jour.Cela signifie que votre requête ne contiendra qu'une mise à jour de la propriété Nom sur cette entité (c'est-à-dire qu'elle touche des données)

Remarque: vous souhaitez vous assurer de le faire sur un contexte que vous contrôlez étroitement car vous ne pouvez pas attacher un objet déjà attaché au graphique de suivi EF.Dans le cas ci-dessus, le SELECT sera NON Joindre des entités au graphique comme anonyme (vous êtes donc en sécurité en utilisant le même contexte)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top