Domanda

Ho le seguenti colonne nella mia tabella

    .
  • ID (int)
  • Nome (nvarchar) di solito <100 caratteri
  • dati (nvarchar) media 1 MB

    Sto scrivendo un programma che passerà a ogni riga ed eseguirà alcune operazioni nel campo del nome.Dal momento che sto usando solo il campo Nome e il campo Data è molto grande, è possibile dirigere EF a caricare solo il campo ID e nome?

È stato utile?

Soluzione

sicuro è

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

Questo metodo sta selezionando in una classe anonima.

Se vuoi salvarlo di nuovo, puoi farlo con qualcosa che chiamo un'entità fittizia:

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();
.

Questo metodo funziona con il monitoraggio dell'istantanea poiché EF traccia solo le modifiche apportate dopo la chiamata allegata da inviare nell'istruzione Aggiornamento.Ciò significa che la tua query conterrà solo un aggiornamento per la proprietà del nome su quell'entità (cioè non toccare i dati)

Nota: si desidera assicurarsi di farlo su un contesto, il controllo saldamente come non puoi allegare un oggetto che è già collegato al grafico di tracciamento EF.Nel caso sopra il caso la selezione non Allega entità al grafico come anonimo (quindi sei sicuro utilizzando lo stesso contesto)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top