使用实体框架将记录传递给视图

时间:2011-12-06 22:23:22

标签: asp.net-mvc asp.net-mvc-3 entity-framework

我使用的是.NET 4.0,MVC3和实体框架4.0

我需要将类型为“statement”的数据库记录传递给视图。获取记录的代码如下:

public ActionResult pdfStatement(string InvoiceNumber)

{

            ObjectParameter[] parameters = new ObjectParameter[1];

            parameters[0] = new ObjectParameter("InvoiceNumber", InvoiceNumber);

            return View(_db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters));            
        }

其中“uspInvoiceStatement”是用于获取“statement”的存储过程

我创建了一个强类型视图,它接收“语句”

< % @ Page Language="C#" Inherits="System.Web.Mvc.ViewPage < InvoiceSearch.Models.Statement >" %>

当我运行应用程序时,我得到一个例外

    "The model item passed into the dictionary is of type 'System.Data.Objects.ObjectResult`1[InvoiceSearch.Models.Statement]',
 but this dictionary requires a model item of type 'InvoiceSearch.Models.Statement'. 

帮助我摆脱这个麻烦。  “

1 个答案:

答案 0 :(得分:0)

该错误非常有用 - 它告诉您,您正在发送ObjectResult&lt; Statement&gt;到视图asi viewmodel,你应该发送Statement。

你的_db.ExecuteFunction总是返回ObjectResult&lt; Statement&gt;,所以你需要从中获取Statement,如下所示:

var statementResult = _db.ExecuteFunction<Models.Statement>("uspInvoiceStatement", parameters);
var statement = statementResult.SingleOrDefault();
if (statement != null)
{
    return View(statement); // isnt that nicer when you can see what your viewmodel is?
}
else
{
    return View("NotFound");
}