【问题标题】:Store procedure not working with Linq to SQL, in view在视图中,存储过程不适用于 Linq to SQL
【发布时间】: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


【解决方案1】:

我使用 linq-to-sql 已经有一段时间了,但是在快速刷新后我发现您可以在 dbml 设计器中更改存储过程的结果类型,如下所示:

当然,在您的情况下,您应该选择类型EmployeeAtd

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2010-10-10
    • 1970-01-01
    相关资源
    最近更新 更多