我正在使用带有 WinForms 的 Entity Framework 5.0,并且我只是按照 MSDN 的 Entity Framework 网站上的Databinding with WinForms教程进行操作。我将 Category 类更改为具有 SortId 以便可以存储排序顺序:
public class Category
{
private readonly ObservableListSource<Product> _products =
new ObservableListSource<Product>();
public Category(int pSortId = 0)
{
Name = "New Category";
SortId = pSortId;
}
public int CategoryId { get; set; }
public string Name { get; set; }
public int SortId { get; set; }
public virtual ObservableListSource<Product> Products { get { return _products; } }
}
但是,添加 SortId 后,应用程序停止在 DataGridView 中显示类别。通过逐步调试调试器并在 OnLoad 方法中添加调试语句,我发现当调用 _context.Categories.Load() 时,该方法过早停止执行,这意味着 categoryBindingSource 永远不会分配数据源。
_context.Categories.Load() 在这里被调用(就像在上面提到的教程中一样)
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
_context = new ProductContext();
_context.Categories.Load();
this.categoryBindingSource.DataSource =
_context.Categories.Local.ToBindingList();
}
问题:有谁知道为什么 Load 方法会这样做?(这是DbExtensions.Load)
如果需要,ProductContext 类(也未从教程中修改)是:
public class ProductContext : DbContext
{
public DbSet<Category> Categories { get; set; }
public DbSet<Product> Products { get; set; }
}