Вопрос

У меня есть следующие столбцы в моем столе

    .
  • id (int)
  • имя (nvarchar) обычно <100 символов
  • Данные (nvarchar) Средняя 1 МБ

    Я пишу программу, которая пройдет через каждую строку и выполняет некоторые операции на поле имени.Поскольку я использую только поле имени, и поле данных очень велико, возможно ли направить EF только загрузки только идентификатора и имени?

Это было полезно?

Решение

Конечно, это

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

Этот метод выбирает в анонимный класс.

Если вы хотите сохранить это снова, вы можете сделать это с чем-то, что я называю фиктивным объектом:

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

Этот метод работает с отслеживанием снимков, так как EF только отслеживает изменения, сделанные после присоединения вызова для отправки обратно в оператор обновления.Это означает, что ваш запрос будет содержать только обновление для свойства имени в этом объекте (т. Е. Это не касается данных)

Примечание. Вы хотите убедиться, что вы сделаете это в контексте, который вы тесно контролируете, так как нельзя подключить объект, который уже подключен к графику отслеживания EF.В приведенном выше случае выберите не присоединяет объекты на график в качестве анонимного (так что вы в безопасности с использованием одного и того же контекста)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top