EF - 在 DevArt EntityDeveloper 和 Syncfusion WinForm 网格之间映射外键

EF - Mapping foreign key between DevArt EntityDeveloper & Syncfusion WinForm grid

我需要一些帮助来了解将数据从 SQL 数据库表示到 SyncFusion 网格控件的最佳方式。

Animal table 包含眼睛颜色、毛色的外键...

我可以从 DevArt 生成的 ObjectContext 添加 ObjectSet 作为 SyncFusion sfDataGrid 的数据源。正如我们在图片上看到的,我们看到了外键。

如果我想显示 {rec.Coat.Name} 而不是 {rec.CoatId},我必须使用 UnboundColumn (enter link description here)。但是使用这种方式会带来一些麻烦:SyncFusion 组件无法对 UnboundColumn 进行排序。从小编看来,暂时没有实现的打算。

那么,使用 Entity Framework 将数据(和外键)从 SQL table 转换为适合 Winform 控件的数据源的好方法是什么?

感谢您的帮助。

文森特

我们正在使用 DataView 的排序 属性 对 SfDataGrid 中的记录进行排序。如您所知,未绑定列不是 DataTable 中绑定到 SfDataGrid 的实际列。因此,即使您应用了排序,它也不会被排序并从框架中抛出异常,因为相应的列在实际的 DataTable 中不可用。因此,根据您的要求,我们无法提供使用 DataTable 作为 DataSource 的支持。

另一方面,我们建议您可以使用 Entity framework 并将实体集合分配给 SfDataGrid。 SfDataGrid 支持 entity framework 的未绑定列的排序和所有其他数据操作。因为,我们正在处理我们自己的排序逻辑和所有其他数据操作。您可以参考以下文章了解如何使用 SQL 和 Entity framework。

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

SQLTableDependency.OnChanged 方法将在服务器端数据更新时被调用。这样,您就可以基于此更新应用程序中的实体。能否请您通过以上文章让我们知道是否符合您的要求?

此致,

Vijayarasan S

尝试在 LINQ 查询中使用 Join 将结果集中的 rec.CoatId 替换为 rec.Coat.Name:https://docs.microsoft.com/en-us/ef/core/querying/complex-query-operators .

解决方法如下:

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();

感谢来自 SyncFusion 公司的@Devart 支持和@Vijayarasan :)