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?

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top