Я использую Linq To Entities, чтобы я мог Linq к моей базе данных MySql.Моя проблема в том, что у меня есть таблица с большими текстовыми полями, поэтому я не хочу загружать их, если они мне не нужны, а модель отложенной загрузки L2E не работает, потому что (1) поставщик MySql не выглядитвообще поддерживать отложенную загрузку, и (2) даже если бы это было так, я не думаю, что это было бы так или иначе правильно.
Урезано, чтобы проиллюстрировать проблему, у меня есть большая таблица со столбцами: Id,Text1, Text2, Text3
У меня будет подпрограмма, которая должна работать только с Text1, и другая подпрограмма, которая работает с Text2.Поскольку содержимое текстовых полей большое, я действительно не хочу выбирать текстовые поля, которые я не использую для данной подпрограммы.
Другими словами, выполнение этого будет слишком дорогим:
Dim items = From i In db.MyTable Where [predicate]
Но при этом:
Dim items = From i In db.MyTable Where [predicate] Select i.Id, i.Text1
создает IQueryable (Of anonymous_type) вместо IQueryable (Of MyTable), и, поскольку мне нужно иметь возможность обновлять различные поля и вызыватьSaveChanges, мне нужны объекты MyTable для этого.Я не могу преобразовать анонимный тип в новую MyTable, потому что DataContext не узнает об этом и, следовательно, обновления не будут работать.
(И мне кажется (хотя это может быть моей нехваткой L2E)знание), что , даже если провайдер MySql поддерживал отложенную загрузку, это означало бы, что я мог бы указать отложенную загрузку для текстовых полей, но тогда он делал бы N запросов к серверу, пока я просматривал N записей.Другими словами, ленивая загрузка, кажется, нужна, когда вам может понадобиться столбец с большими данными, но, возможно, вам не понадобится, не тогда, когда вы знаете, , что вам нужен этот столбец, но вам не нужны другие столбцы.)
Итак, вопрос в том, как выбрать только те поля, которые мне нужны, но при этом получить объект нужного типа, чтобы я мог обновить его позже?