Как настроить постоянный объект для «один ко многим» и «многие ко многим» одновременно? [DevExpress]

#c# #linq #devexpress #xpo

#c# #linq #devexpress #xpo

Вопрос:

У меня проблема со следующей схемой, я ее прикрепил.Я хочу запросить из своей базы данных только один объект с классом « Manufacturer «. Нравится:

 var res = new XPQuery<Manufacturer>(session);
  

А затем запросить всю информацию, связанную с моим состоянием, в LINQ.
Я пробовал XPLiteObject, XPObject, Association attribute, NoForeignKey Attribute, XPOCollection и много чего еще, но мне ничего не помогло.

Я перепробовал много подходов, и каждый раз у меня появляется новое исключение, например: SelectMany — метод не поддерживается. Не удается установить внешний ключ в таблице. Дублировать первичный ключ.

Мой вопрос: как описать классы для обычного извлечения данных из БД? Схема таблиц

UPD: Мое решение сейчас таково: использовать .ToList() для каждого объекта, а затем использовать linq-query для объединения данных и выполнить необходимый запрос.

 var manufacturer = new XPQuery<Manufacturer>(session).ToList();
var cars = new XPQuery<Car>(session).ToList();
var countries = new XPQuery<Country>(session).ToList();

var result = from m in manufacturer ....
  

Комментарии:

1. Я думаю, вы хотите «Включить» свои свойства, на которые ссылаются, верно? Имеется в виду «детализация» от 1 объекта к другим?

2. @Дмитрий, да, ты прав. Я добавил свое решение в вопрос, вы можете посмотреть на него.

3. У меня вообще нет опыта работы с DevExpress, но взгляните на это => documentation.devexpress.com/eXpressAppFramework/112681 /… ИЛИ documentation.devexpress.com/eXpressAppFramework/113637 / … и посмотрите, может ли это вам помочь.

Ответ №1:

Итак, я нашел решение своего вопроса. Я скачал DevExpress, который может добавлять шаблоны для Visual Studio. Затем я выбираю Добавить новый элемент в свой проект с именем «DevExpress ORM DataModel Wizard«. Этот мастер может создавать постоянные объекты для существующей базы данных. После этого я могу запросить базу данных со следующим синтаксисом:

 var manufacturer = new XPQuery<Manufacturer>(session).Select(x => x....)...;
  

Но если вы хотите использовать .Выберите Many() в вашем запросе LINQ, который вы должны использовать .ToList() а затем использовать .SelectMany(). Я столкнулся с множеством проблем, когда попытался присоединиться или выполнить некоторые другие операции, связанные с LINQ. Ну, если у вас возникли какие-то ошибки, сначала после .Select() попробуйте .ToList() а затем выполните свою операцию.