Нетерпеливая загрузка Linq к Объектам SQL в сам ссылка на таблицу

Это - свободное, онлайн: http://www.sqlinform.com/ (требует среды выполнения Java)

7
задан Iain Galloway 6 May 2015 в 11:00
поделиться

3 ответа

Может быть, вы могли бы попробовать сделать шаг назад и посмотреть, что вы хотите сделать с отношением? Я предполагаю, что вы хотите отобразить эту информацию для пользователя, например, "изменено Иэном Галлоуэем 8 часов назад"

Может ли что-то вроде следующего сработать? : -

var users = from u in db.Users
            select new
            {
              /* other stuff... */
              AddedTimestamp = u.AddedTimestamp,
              AddedDescription = u.AddedByUser.FullName,
              ChangedTimestamp = u.ChangedTimestamp,
              ChangedDescription = u.ChangedByUser.FullName
            };

Я использовал там анонимный тип для (imo) ясности. Вы можете добавить эти свойства к своему типу пользователя, если хотите.

Что касается вашего второго вопроса, ваш обычный LoadWith (x => x.AddedByUser) и т. Д. Должен работать нормально - хотя я предпочитаю сохранять строку описания напрямую в базе данных - у вас есть компромисс между обновлением вашего описания при изменении ChangedByUser.FullName и необходимостью делать что-то сложное и, возможно, нелогичное, если ChangedByUser удаляется (например, ON DELETE CASCADE,

3
ответ дан 7 December 2019 в 07:48
поделиться

Не уверен, что есть решение этой проблемы с помощью Linq to Sql. Если вы используете Sql Server 2005, вы можете определить (рекурсивную) сохраненную процедуру, которая использует общие табличные выражения для получения желаемого результата, а затем выполнить его с помощью DataContext.ExecuteQuery.

0
ответ дан 7 December 2019 в 07:48
поделиться

Любые циклы недопустимы . Поскольку LoadWith или AssociateWith применяются к каждому типу в контексте, нет внутреннего способа предотвратить бесконечный цикл. Точнее, он просто запутался в том, как создать SQL, поскольку SQL Server не имеет CONNECT BY и CTE действительно прошли то, что Linq может автоматически генерировать с помощью предоставленной инфраструктуры.

Наилучший вариант, доступный вам, - это вручную выполнить соединение первого уровня с таблицей пользователей для обоих дочерних элементов и анонимного типа, чтобы вернуть их. Извините, это не простое и понятное решение, но это все, что на данный момент доступно с Linq.

4
ответ дан 7 December 2019 в 07:48
поделиться
Другие вопросы по тегам:

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