Основная каркас для частичной нагрузки
-
12-12-2019 - |
Вопрос
У меня есть следующие столбцы в моем столе
- .
- 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.В приведенном выше случае выберите не присоединяет объекты на график в качестве анонимного (так что вы в безопасности с использованием одного и того же контекста)