0

我有一个带有 Microsoft Datagrid 的 VS11 beta WPF 应用程序,该应用程序基于 Entity Framework 5.0b2 模型(来自 sql server 数据库)中的表。(网格使用通过从实体框架模型添加数据源并将表格从该模型拖放到设计图面而自动生成的任何代码。)。然后,我使用 EF5.0 DBContext 代码生成器插件来生成可以在应用程序中使用的 DbContext 类型。

结果并不好。我得到一个似乎无法修复的编译错误;至少我的尝试让事情变得更糟。数据网格不喜欢 DbContext 并且不与它共存(当数据网格和 DbContext 都基于相同的数据库和表时)。是否有解决方法,也许是通过更改代码生成器模板?

错误消息粘贴在最后。感谢您对此的任何帮助或见解。

(请注意,以下密切相关的帖子不是答案,因为虽然我可以将 dbcontext 转换为 objectcontext,但是当我这样做时,我无法让 datagrid 正常使用它;如果我将 objectcontext 转换为 dbcontext,我没有自动生成的 dbcontext 类型: 将 DBContext 转换为 ObjectContext 以便与 GridView 一起使用)。我正在寻找一个相当简单的解决方法——如果我开始手动编码所有类型和转换,我确信有一个解决方法,但我想保持使用自动生成代码的易用性——我不想被占用代码生成器可以而且应该这样做。如果没有解决方案,我想我会将控件基于 ado.net,并将实体框架留给非 ui 代码。

错误
无法将类型“System.Data.Entity.DbSet”隐式转换为“System.Data.Objects.ObjectQuery”

Documents\Visual Studio 11\Projects\WpfApplication3\WpfApplication3\MainWindow.xaml.cs

导致错误的行(由 Microsoft 拖放以 EF 表为源的数据网格创建): System.Data.Objects.ObjectQuery myTblsQuery = myDbsEntities.MyTbls;

4

1 回答 1

0

在 WPF 设计器中通过拖放生成的代码从来都不是很好,而且 WPF 团队还没有更新它以使用 DbContext。您最好的选择是像其他答案建议的那样下拉到 ObjectContext,或者使用 DbContext 支持的更好的 WPF 数据绑定,但不使用拖放操作。

WPF 与 DbContext 的数据绑定非常简单,因为每个 DbSet 的 Local 属性实际上是一个 ObservableCollection,WPF 自然可以很好地绑定到它。因此,例如,您最终会绑定您的视图源,如下所示:

categoryViewSource.Source = _context.Categories.Local;

此博客文章包含更多详细信息:http: //blogs.msdn.com/b/adonet/archive/2011/03/14/10138486.aspx

于 2012-03-25T15:32:57.983 回答