我有一个VS11 beta WPF应用程序,其中包含一个基于Entity Framework 5.0b2模型(来自sql server数据库)的表的Microsoft Datagrid。 (网格使用通过从实体框架模型添加数据源并将表格从该模型拖放到设计图面来自动生成的任何代码。)。然后我使用EF5.0 DBContext代码生成器加载项来生成我可以在应用程序中使用的DbContext类型。
结果并不好。我收到了一个似乎无法修复的编译错误;至少我的尝试使事情变得更糟。数据网格不喜欢DbContext并且不与它共存(当datagrid和DbContext都基于相同的数据库和表时)。是否有解决方法,可能是通过更改代码生成器模板?
最后粘贴错误消息。感谢您对此的任何帮助或见解。
(请注意以下密切相关的帖子并不是答案,因为虽然我可以将dbcontext转换为objectcontext,但是当我这样做时,我无法使datagrid正常工作;如果我将objectcontext转换为dbcontext ,我没有自动生成的dbcontext类型: Convert DBContext to ObjectContext for use with 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;
答案 0 :(得分:0)
通过在WPF设计器中拖放而产生的代码从来都不是很好,并且WPF团队没有更新它以使用DbContext。你最好的选择是像其他答案建议一样下载到ObjectContext,或者使用DbContext支持的更好的WPF数据绑定,但不使用拖放操作。
与DbContext的WPF数据绑定非常简单,因为每个DbSet的Local属性实际上是一个ObservableCollection,WPF自然会很好地绑定它。例如,您最终将视图源绑定为:
categoryViewSource.Source = _context.Categories.Local;
此博文包含更多详细信息:http://blogs.msdn.com/b/adonet/archive/2011/03/14/10138486.aspx