Asp.net mvc 尝试循环ASP.NET MVC中EntityCollection中的实体时强制转换无效
我就直接跳进去。我有一个名为“Request”的模型,它是我使用LINQtoSQL创建的。我有另一个模型叫“评论”。一个“请求”可以有许多“评论” 在我的控制器中,我有以下代码: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 议论
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>