Entity Framework carga parcial
-
12-12-2019 - |
Pergunta
Eu tenho as seguintes colunas na minha mesa
- Id (int)
- Nome (nvarchar) normalmente < 100 caracteres
- De dados (tipo de dados nvarchar) em média, 1 MB
Eu estou escrevendo um programa que vá através de cada linha e de efectuar algumas operações para o campo Nome.Desde que eu estou apenas usando o nome no campo Nome e o campo de Dados é muito grande, é possível direcionar EF para carregar apenas o Id e o Nome do campo?
Solução
Com certeza é
ctx.YourDbSet.Select(p=> new { Id = p.Id, Name = p.Name});
este método é selecionar em um anônimo classe.
se você deseja salvar esta de volta novamente, você pode fazer isso com algo que eu chamo de uma entidade fictícia:
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();
Este método funciona com acompanhamento instantâneo EF apenas controla as alterações feitas após a chamada de anexar para enviar de volta na instrução update.Isto significa que a consulta irá conter apenas uma atualização para o nome da propriedade na entidade (ou seja, ele não vai toque de dados)
NOTA:você quer certificar-se de que você fazer isso em um contexto controla muito bem como você não pode anexar um objeto que já está ligado à EF acompanhamento gráfico.No caso acima, a escolha será não anexar entidades para o gráfico como a sua anônimo (então, você está seguro usando o mesmo contexto)