无法将类型为“System.Data.Entity.DynamicProxies”的对象强制转换为“System.Data.DataRowCollection”类型

时间:2013-04-01 10:45:17

标签: asp.net entity-framework

可能是我的问题很简单或者我是新手,事情是在尝试在转发器的项目数据绑定中执行以下代码时出现错误无法转换类型的对象  * System.Data.Entity.DynamicProxies.AutoPublishLog_06BC2AA20C3D11E56D78DD544C2C7E5211D828344650C93B9AA23BDEE16A6DCE'键入'System.Data.DataRowView''。*

错误行是

Dim row As System.Data.DataRowView = DirectCast(e.Item.DataItem,   System.Data.DataRowView)

任何帮助,提前致谢

代码段

Protected Sub AutoPublishList_ItemDataBound(ByVal sender As Object, ByVal e As 
System.Web.UI.WebControls.RepeaterItemEventArgs) Handles AutoPublishList.ItemDataBound

    If e.Item.ItemType = ListItemType.AlternatingItem OrElse e.Item.ItemType = ListItemType.Item Then
        Try
             Dim row As System.Data.DataRowView = DirectCast(e.Item.DataItem, System.Data.DataRowView) 

            Dim pageID As Literal = DirectCast(e.Item.FindControl("PageID"), Literal)

             If Convert.ToInt32(row("PageID")) = Business.Objects.Constants.A Then
            pageID.Text = "Dummy A"
              End If
             If Convert.ToInt32(row("PageID")) = Business.Objects.Constants.B Then
            pageID.Text = "Dummy B"
               End If

        Catch ex As Exception
            AddErrInfo(ex)
            ErrHandler(ex)
        End Try
    End If

End Sub

2 个答案:

答案 0 :(得分:1)

您正在混合经典ADO.NET和实体框架对象。这是两个不同的世界,不会自动互相兼容。

EF对象是强类型对象,我建议您将e.Item.DataItem强制转换为EF类型。从您的异常消息中我怀疑EF类型名为AutoPublishLog。

尝试将其转换为此内容:

Dim row AS AutoPublishLog = DirectCast(e.Item.DataItem, AutoPublishLog)

'your code

If row.PageID = Business.Objects.Constants.A then
'your code

这应该有用(也许你需要一些名称空间或其他名称的AutoPublishLog,但是在不知道你的模型的情况下很难说出来。)

答案 1 :(得分:0)

我不知道如何使用VB.Net,但我认为你的e.Item.DataItem不能转换为你想要的类型......我怀疑。尝试查看类型。