EF — сопоставление внешнего ключа между сеткой DevArt EntityDeveloper и Syncfusion WinForm

Мне нужна помощь, чтобы понять, как лучше всего представлять данные из базы данных SQL в элемент управления сеткой SyncFusion.

Таблица Animal содержит внешние ключи для цвета глаз, цвета шерсти...

Я могу добавить ObjectSet из ObjectContext, сгенерированного DevArt, в качестве источника данных для SyncFusion sfDataGrid. Как мы видим на картинке, мы видим внешние ключи.

Содержимое таблицы SQL

Если я хочу, чтобы отображалось {rec.Coat.Name} вместо {rec.CoatId}, я должен использовать UnboundColumn (введите здесь описание ссылки). Но использование этого способа вызывает некоторые проблемы: компонент SyncFusion не может сортировать UnboundColumn. От редактора нет плана по реализации.

Итак, каков хороший способ использования Entity Framework для преобразования данных (и преобразования внешних ключей) из таблицы SQL в хороший элемент управления DataSource для Winform?

Спасибо за помощь.

Винсент


person Nolmë Informatique    schedule 15.06.2020    source источник


Ответы (3)


Попробуйте использовать Join в своем запросе LINQ, чтобы заменить rec.CoatId на rec.Coat.Name в наборе результатов: https://docs.microsoft.com/en-us/ef/core/querying/complex-операторызапросов .

person Devart    schedule 19.06.2020

Мы используем свойство Sort объекта DataView для сортировки записей в SfDataGrid. Как вы знаете, несвязанный столбец не является фактическим столбцом в DataTable, который привязан к SfDataGrid. Таким образом, даже если вы применяете сортировку, она не сортируется и не выдает исключение из фреймворка, поскольку соответствующий столбец недоступен в фактическом DataTable. Таким образом, согласно вашему требованию, мы не можем предоставить поддержку с использованием DataTable в качестве источника данных.

С другой стороны, мы хотели бы предложить вам использовать инфраструктуру Entity и назначить коллекцию сущностей SfDataGrid. SfDataGrid поддерживает сортировку и все другие операции с данными для несвязанного столбца для структуры сущностей. Потому что мы используем собственную логику для сортировки и всех других операций с данными. Вы можете обратиться к приведенной ниже статье, чтобы узнать, как использовать платформу SQL и Entity.

https://dzone.com/articles/receive-notifications-with-new-values-when-table-r

Метод SQLTableDependency.OnChanged будет вызываться при каждом обновлении данных на стороне сервера. Таким образом, вы можете обновлять объекты в приложении на основе этого. Не могли бы вы просмотреть приведенную выше статью и сообщить нам, соответствует ли она вашим требованиям?

С уважением,

Виджаярасан С

person Vijayarasan    schedule 18.06.2020

Вот решение:

var query0 = from myanimal in this.ctx.Animals
             join animalCoat in this.ctx.Coats on myanimal.CoatId equals animalCoat.Id
                 select new
                 {
                     OwnerName = myanimal.FullName,
                     myanimal.Male,
                     CoatName = animalCoat.Name,
                 };
this.sfDataGrid1.DataSource = query0.ToList();

Спасибо поддержке @Devart и @Vijayarasan из компании SyncFusion :)

person Nolmë Informatique    schedule 23.06.2020