【发布时间】:2014-02-06 10:54:51
【问题描述】:
我是 MVC 3 和 LIN 到 SQL 的新手,我正在尝试通过 DataContext 从数据库调用存储过程“GetAttendance_Sp”,我成功地做到了,但现在问题出现了,它会引发错误:
Exception Details: System.InvalidCastException: Unable to cast object of type 'EmployeeAttendance_app.Models.GetAttendance_SpResult' to type 'EmployeeAttendance_app.Models.EmployeeAtd'.
Source Error:
Line 10:
Line 11: <ul>
Line 12: @foreach (EmployeeAttendance_app.Models.EmployeeAtd emp in (IEnumerable<Object>)ViewData.Model)
Line 13: {
Line 14: <li>@emp.EmplName</li>
代码:
using EmployeeAttendance_app.Models;
namespace EmployeeAttendance_app.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = "Employee Attendance";
var DataContext = new EmployeeAtdDataContext();
var EmployeeAtd = DataContext.GetAttendance_Sp;
return View(EmployeeAtd);
}
public ActionResult About()
{
return View();
}
}
}
查看:
@foreach (EmployeeAttendance_app.Models.EmployeeAtd emp in (IEnumerable<Object>)ViewData.Model)
{
<li>@emp.EmplName</li>
}
</ul>
即使我对硬核选择查询做了同样的事情并且工作正常,但对于 SP,为什么?
解释为什么视图不适用于 SP 但适用于简单选择查询,即使两者都返回相同的结果集?
【问题讨论】:
-
我们将不胜感激
-
显然你的存储过程返回
GetAttendance_SpResult并且你有一个EmployeeAtd作为视图模型。 -
sp给出什么输出,显示一些sp代码
-
你能试试这样的吗? EmployeeAtd em=new EmployeeAtd();并将结果从 SP 转换为新创建对象的属性。
-
@GertArnold 在我脑海中提出的问题,为什么它将 Result 附加到存储过程的名称?为什么它的行为像 CLASS ?因为对象模型将 SP 作为方法存储。
标签: sql-server asp.net-mvc linq-to-sql