我是C#的初学者,做我的项目我遇到了一些麻烦。我在Windows窗体中有DataGrid
,它连接到数据库。要编辑数据库中的记录,我必须在datagrid上选择它。我编写了选择代码,现在是。
public BugDescriptor GetSelectedBug()
{
BugDescriptor selectedBug = null;
if (ctlBugs.SelectedRows.Count > 0)
{
selectedBug = (BugDescriptor) ctlBugs.SelectedRows[0].DataBoundItem;
}
if (ctlBugs.SelectedCells.Count > 0)
{
selectedBug = (BugDescriptor) ctlBugs.SelectedCells[0].OwningRow.DataBoundItem;
}
return selectedBug;
}
因此,ctlBugs
是我的数据网格的名称,BugDescriptor
是类,描述数据库中记录的字段。
当我尝试调试时,我有一个例外:Unable to cast object of type 'System.Data.Entity.DynamicProxies.Bug_ED6497CD7603C9E48A4F28CF92AF30E4A88B104DE0AC6FAF0D12F034495FF727' to type 'BugTrackingSystem.BugDescriptor
。
我做错了什么?问我,如果我需要告诉别人我的代码。
P上。 S.我已经阅读了类似问题的一些答案,但无法理解如何在我的麻烦中使用它们。
答案 0 :(得分:2)
DataBoundItem
中的对象似乎是Bug
而不是BugDescriptor
。希望这对你的背景有意义。
跟踪状态的实体框架动态生成扩展实体类的代理类。这就是为什么你在异常上看到一个奇怪的类名,但原始的类名是名称的一部分。同样在VS上,您可以检查对象以找到基类。
System.Data.Entity.DynamicProxies。的错误强> _ED6497CD7603C9E48A4F28CF92AF30E4A88B104DE0AC6FAF0D12F034495FF727
答案 1 :(得分:2)
如果要禁用DynamicProxies:
dbContext.Configuration.ProxyCreationEnabled = false;
在EF 4中
objectContext.ContextOptions.ProxyCreationEnabled = false;
但你需要打电话给"包括"使用linq时。