无法将类型为“System.Data.Entity.DynamicProxies”的对象转换为类型“BugTrackingSystem.BugDescriptor”

4

我是C#的初学者,在做我的项目时遇到了一些麻烦。我在Windows Form中使用了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是描述数据库记录字段的类。当我尝试调试时,出现了异常:无法将类型为“System.Data.Entity.DynamicProxies.Bug_ED6497CD7603C9E48A4F28CF92AF30E4A88B104DE0AC6FAF0D12F034495FF727”的对象强制转换为类型“BugTrackingSystem.BugDescriptor”
我做错了什么?如果需要告诉您有关我的代码的其他信息,请询问我。
附注:我已经阅读了一些类似问题的答案,但不知道如何在我的问题中使用它们。
2个回答

3
如果您想禁用动态代理(DynamicProxies):
dbContext.Configuration.ProxyCreationEnabled = false;

在EF 4中
objectContext.ContextOptions.ProxyCreationEnabled = false;

但是在使用linq时,您需要调用"include"。

2
似乎在中的对象是类型为而不是。希望这能在您的上下文中有所意义。
Entity Framework会动态生成代理类来跟踪状态,这些代理类会扩展您的实体类。这就是为什么您在异常信息中看到了一个奇怪的类名,但原始类名也是其名称的一部分。此外,在VS中,您可以检查对象以查找基类。
System.Data.Entity.DynamicProxies.Bug_ED6497CD7603C9E48A4F28CF92AF30E4A88B104DE0AC6FAF0D12F034495FF727

谢谢您的回答。但是我找不到如何检查DataBoundItem中的对象? - Anima
在Visual Studio中,只需在GetSelectedBug函数中放置一个断点,并打开“Autos”调试器窗口逐步执行代码即可。在调试器中查看数据 - Wagner DosAnjos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接