我在WinForms中使用实体框架5.0,我只是简单地遵循MSDN实体框架网站上的用WinForms建立数据库教程。我将分类类更改为有一个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();
}问题:有人知道为什么加载方法会这样做吗?(是DbExtensions.Load)
如果需要,ProductContext类(也未从教程中修改)是:
public class ProductContext : DbContext
{
public DbSet<Category> Categories { get; set; }
public DbSet<Product> Products { get; set; }
}发布于 2013-01-16 18:08:16
这是我的解决方案,我不会把它标记为答案,因为如果有人能更详细地解释幕后发生的事情,这会更有帮助。
简而言之,我告诉Visual中断任何异常(调试>异常>检查抛出下的所有内容),并在外部代码中找到一个InvalidOperationException,它的消息是“类'EFWinForms.Category‘没有无参数的构造函数”。
使用此通知,我将分类类的构造函数拆分为:
public Category() : this(0) { }
public Category(int pSortId)
{
Name = "New Category";
SortId = pSortId;
}我的假设是,DbExtensions.Load方法捕获了这个异常,并终止了线程,这看起来很奇怪,但我无法证明它。
https://stackoverflow.com/questions/14344818
复制相似问题