【发布时间】:2017-12-22 09:01:09
【问题描述】:
这个让我发疯:我有一个基于数据库的 EF 模型,该数据库包含一个名为 Category 的表,其中包含 6 行。
我想在 WPF 的下拉列表中显示它,所以我需要将它绑定到 Categories.Local Observable 集合。
问题是这个可观察的集合永远不会收到数据库表的内容。我的理解是,在使用SaveChanges() 执行查询或保存数据时,集合应该与数据库同步,所以我运行了以下 2 个测试:
Categories = _db.Categories.Local;
// test 1
Debug.WriteLine(_db.Categories.Count());
Debug.WriteLine(_db.Categories.Local.Count());
// test 2
_categories.Add(new Category() { CategoryName = "test" });
_db.SaveChanges();
Debug.WriteLine(_db.Categories.Count());
Debug.WriteLine(_db.Categories.Local.Count());
Debug.WriteLine(_categories.Count());
测试 1 在数据库中显示 6 行,在本地显示 0。 测试 2 在数据库中显示 7 行,在本地显示 1 行(两个版本)
我也尝试使用_db.Category.Load(),但正如预期的那样,它不起作用,因为它是数据库优先,而不是代码优先。
我还浏览了这个页面https://msdn.microsoft.com/en-us/library/jj574514(v=vs.113).aspx,创建了一个基于对象的数据源并将我的组合框链接到它,但没有成功。
有谁知道我做错了什么? 提前感谢您的帮助。
【问题讨论】:
-
为什么你认为
_db.Category.Load();不起作用?它不是特定于代码的。请注意,_db.Categories.Count()会转换为 SQL 查询,并且不会将任何内容加载到上下文中。 -
我输入了
_db.Category.Load();,它说方法未知。你试过了吗?我同意Count()可能无法完成这项工作,但我不明白如何在添加项目并保存更改后计数为 1,而数据库中有 7 行。 -
这是一种自定义扩展方法。
using System.Data.Entity;应该允许您访问它(以及QueryableExtensions类中的许多其他人)。Load基本上是ToList没有创建列表(只是为了填充DbSet.Local)。 -
嘿!有用!太感谢了!现在,我怎样才能将此标记为答案?你想写下答案以便我标记它吗?
-
不客气,很高兴它有帮助 :) 你去了。
标签: wpf entity-framework db-first