LINQ к объектам и ленивой загрузке

Тесты транспортира выполняются над узлом, поэтому вы можете использовать команды файловой системы узла (модуль 'fs').

Например, метод appendFile Как добавить файл в Node?

9
задан Martijn Pieters 18 August 2016 в 21:15
поделиться

6 ответов

Jon,

Я играл с linq к объектам также. Это имеет длинный путь для движения, прежде чем это догонит linq к SQL. Я должен был использовать linq для объектов для Таблицы на материал Наследования Типа. Я недавно нашел хорошую статью, которая объясняет целую 1 компанию 2 других технологических вещи ORM здесь.

Однако можно сделать ленивую загрузку, в некотором смысле, путем выполнения этого:

// Lazy Load Orders 
var alice2 = data.Customers.First(c => c.Name == "Alice");

// Should Load the Orders
if (!alice2.Orders.IsLoaded)
    alice2.Orders.Load();

или Вы могли просто включать Заказы в исходный запрос:

// Include Orders in original query
var alice = data.Customers.Include("Orders").First(c => c.Name == "Alice");

// Should already be loaded
if (!alice.Orders.IsLoaded)
    alice.Orders.Load();

Надежда это помогает.

Dave

12
ответ дан 4 December 2019 в 09:14
поделиться

Так, этот хороший дизайн платформы? Или Microsoft по размышлению этого для нас?

Хорошо позволяет, анализируют это - все взгляды, что Microsoft делает так, мы не имеем к, действительно делает нас более ленивыми программистами. Но в целом, это действительно делает нас более продуктивными (по большей части). Таким образом, они сверхдумают, или они просто думают для нас?

5
ответ дан 4 December 2019 в 09:14
поделиться

Если бы LINQ-to-Sql и LINQ к объектам прибыли из двух различных компаний, то это было бы приемлемое различие - нет никакого закона, говоря, что все LINQ-To-Whatevers должны быть реализованы тот же путь.

Однако они оба прибывают из Microsoft - и нам не должны быть нужны глубокие знания их внутренних групп разработчиков и процессов, чтобы знать, как использовать две разных вещи, которые, на их поверхности, смотрят точно то же.

ORMs имеют свое место и действительно заполняют разрыв для людей, пытающихся добиться цели, но использование ORM должно знать точно, как их ORM добивается цели - обработка, это как непроницаемый черный квадрат только приведет Вас беспокоиться.

2
ответ дан 4 December 2019 в 09:14
поделиться

Я не знаю много о ORMs, но как пользователь LinqToSql и LinqToEntities, я надеялся бы, что, когда Вы пытаетесь запросить Заказы на Alice, он делает дополнительный запрос для Вас при создании запроса linq (в противоположность не запросам чего-либо или запросам всего для каждой строки).

Кажется естественным ожидать

from o in alice.Orders where o.Item == "Item_Name" select o

для работы, учитывая, это - одна из причин, люди используют ORM's во-первых (для упрощения доступа к данным).

Чем больше я читал о LinqToEntities, тем больше я думаю, что LinqToSql выполняет большинство потребностей разработчиков соответственно. Мне обычно просто нужен непосредственный mappingn таблиц.

1
ответ дан 4 December 2019 в 09:14
поделиться

Даже при том, что Вам не придется знать о внутренних группах разработчиков и процессах Microsoft, факт вопроса - то, что эти две технологии являются двумя совершенно другими зверями.

Проектное решение для LINQ к SQL было, для пользы простоты, к неявно наборам ленивой загрузки. Команда Платформы Объекта ADO.NET не хотела выполнять запросы без пользователя, знающего, таким образом, они разработали API, который будет явно загружен для первого выпуска.

LINQ к SQL был передан команде ADO.NET и таким образом, можно видеть консолидацию API в будущем, или LINQ к SQL свернут в Платформу Объекта, или можно видеть LINQ к атрофии SQL от пренебрежения и в конечном счете стать устаревшими.

1
ответ дан 4 December 2019 в 09:14
поделиться

Я сочувствую, потеряв несколько дней на решение этой самой проблемы.

«Ошибка», если таковая имеется, состоит в том, что есть разумная тенденция ожидать, что слой абстракции будет изолировать от подобных проблем. Вдвойне переход от LINQ к Entities и к уровню базы данных.

При переключении с MS-SQL (с использованием LingToSQL) на MySQL (с использованием LinqToEntities), например, можно было бы подумать, что LINQ, по крайней мере, будет таким же, если не только для экономии затрат на повторную замену. -пишите логику программы.

Необходимость засорять код .Load () и / или LINQ с помощью .Include () просто потому, что измененный механизм сохраняемости под капотом кажется немного тревожным, особенно при тихом сбое. Уровень LINQ должен, по крайней мере, вести себя согласованно.

Ряд фреймворков ORM используют прокси-объект для прозрачной динамической загрузки ленивого объекта, вместо того, чтобы просто возвращать значение null, хотя я был бы доволен исключением из-за не загруженной коллекции.

Я не склонен поверить в отговорку "они сделали это намеренно для вашей выгоды"; другие фреймворки ORM позволяют вам при необходимости аннотировать, хотите ли вы активную или ленивую загрузку. То же самое можно было сделать и здесь.

2
ответ дан 4 December 2019 в 09:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: