Asp.net mvc 尝试循环ASP.NET MVC中EntityCollection中的实体时强制转换无效

Asp.net mvc 尝试循环ASP.NET MVC中EntityCollection中的实体时强制转换无效,asp.net-mvc,model,Asp.net Mvc,Model,我就直接跳进去。我有一个名为“Request”的模型,它是我使用LINQtoSQL创建的。我有另一个模型叫“评论”。一个“请求”可以有许多“评论” 在我的控制器中,我有以下代码: public ViewResult Details(int? id) { return View(requestService.GetRequest(id)); } 在我看来,我有这个标记(为了简洁而编辑) 客户编号: 客户名称: ... 等 日期 用户名 用户IP 议论

我就直接跳进去。我有一个名为“Request”的模型,它是我使用LINQtoSQL创建的。我有另一个模型叫“评论”。一个“请求”可以有许多“评论”

在我的控制器中,我有以下代码:

public ViewResult Details(int? id)
    {
        return View(requestService.GetRequest(id));
    }
在我看来,我有这个标记(为了简洁而编辑)



客户编号:

客户名称:

... 等 日期 用户名 用户IP 议论
好的,下面是发生的事情。当我调用Details方法/操作时,它使用我的服务层来获取用户希望看到的请求。然而,当它在与请求相关联的注释上循环时,它抛出一个“无效强制转换异常”并终止。这段代码在两天前工作时100%正确,并且没有对项目的这一部分进行任何更改(其他文件,但不是这些文件)


我试图找到铸造问题,但我不知所措。请帮助我,因为我认为这是我在我的项目真正开始之前要克服的最后一个障碍。如果您需要更多信息,请告诉我。

您有为GetRequest编写的单元测试吗?如果没有,我建议您编写一个,看看调用该方法时会发生什么

至少,设置一个断点并将其设置到该方法中,以确保已设置Comments集合

CommentDate是日期时间吗?您可能需要对其执行.ToString()。评论的任何成员返回空值吗?有很多东西要查。这里有很多自动单元测试的好机会。:)


祝你好运

好吧,在处理其他项目后离开这个项目一段时间后,我重新审视了一下,发现了问题所在

我根据“生产”数据库及其所有数据关系生成了模型。当我进入项目的一部分,开始向数据库实际写入数据时,我切换到测试数据库来完成所有工作。我没有意识到的是,生产“Comments”表上主键的数据类型与测试“Comments”表不同(为什么?我不知道……),它们都是整数,但prod版本是“bigint”,dev版本是“int”,所以很难发现


所以,既然有可能发生截断,它就惊慌失措,抛出了一个InvalidCastException(在本例中这是完全合乎逻辑的)。我想这只是向你表明,在一个项目之外花一点时间可以给你带来一些好处。无论如何,希望我的不幸能帮助其他人避免他们的不幸。

异常的完整堆栈和完整错误消息是什么?以下是最后几行。。。无法发布完整堆栈跟踪。在System.Data.SqlClient.SqlBuffer.get_Int32()在System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i)在System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader2.MoveNext()在System.Data.Linq.EntitySet
1.Load()在System.Data.Linq.EntitySet
1.GetEnumerator()在c:\Code\prototype\PremiumFreightMVC\views\home\details\aspx.中的ASP.views\u home\details\ux.\uu RenderContent1(HtmlTextWriter\uw,控制参数容器)。aspx:第139行
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Models.Request>" %>
 <p>
        CustomerNumber:
        <%= Html.Encode(Model.CustomerNumber) %>
    </p>
    <p>
        CustomerName:
        <%= Html.Encode(Model.CustomerName) %>
    </p>

    ... etc ...


    <table id="comments">
    <thead>
        <tr>
            <th>Date</th>
            <th>User Name</th>
            <th>User IP</th>
            <th>Comment</th>
        </tr>
    </thead>
    <tbody>
    <% foreach (var comment in Model.Comments) { %>
        <tr>
            <td><%= Html.Encode(comment.CommentDate) %></td>
            <td><%= Html.Encode(comment.CommentUserName) %></td>
            <td><%= Html.Encode(comment.CommentIP) %></td>
            <td><%= Html.Encode(comment.Comment1) %></td>
        </tr>
    <% } %>
    </tbody>
</table>