[英]Return Parameterized Query Results with MVC and EF
我正在嘗試使用Visual Studio 2013,MVC和實體框架返回存儲過程的結果以向用戶顯示數據。 我已經將EDMX模型添加到我的解決方案中,並為要執行的存儲過程完成了功能導入向導。 我所堅持的是如何對模型和控制器進行編碼並將數據返回到視圖。 我不想使用EF創建的生成的CRUD操作和支架視圖。
存儲過程 :
SELECT C.ClassName, G.Grade
FROM Classes as C
INNER JOIN Grade as G on C.ClassID = G.ClassID
WHERE C.UserID = @UserID
型號 :
public class TestModel
{
public string ClassName {get; set;}
public string Grade{get;set;}
}
控制器 :
public class TestController : Controller{
public ActionResult Index()
{
TestEntities db = new TestEntities();
var result = db.TestEntities ("@username");
ViewBag.Results = result.ToList();
return View(result.ToList());
}
}
查看 :
<table>
<h>ViewBag.Results.ClassName</h>
<h>ViewBag.Results.Grade</h>
</table>
這只是簡單的代碼。 我的參考資料完好無損。
如果您已經在EDMX中映射了存儲過程,則必須在上下文中使用如下方法:
[DbFunction("TestEntities", "YourStoreProcedureName")]
public virtual IQueryable<TestModel> YourStoreProcedureName(int UserID)
{
var userIDParameter = UserID != 0?
new ObjectParameter("UserID", UserId) :
new ObjectParameter("UserID", typeof(int));
return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<TestModel>("[TestEntities].[YourStoreProcedureName](@UserId)", userIDParameter);
}
因此,您可以通過以下方式從上下文中調用它:
TestEntities db = new TestEntities();
var result = db.YourStoreProcedureName(1).ToList();
檢查此頁面以查看有關此的更多詳細信息。
現在,如果要使用EF調用參數化查詢,可以按照以下所示操作:
var query =String.Format( @"SELECT C.ClassName, G.Grade
FROM Classes as C
INNER JOIN Grade as G on C.ClassID = G.ClassID
WHERE C.UserID = {0}",UserId);
TestEntities db = new TestEntities();
var result = db.Database.SqlQuery<TestModel>(query).ToList();
而且,如果您要調用未在EDMX中映射的存儲過程,則可以通過以下方式調用它:
TestEntities db = new TestEntities();
var result = db.Database.SqlQuery<TestModel>("YourStoreProcedureName", new SqlParameter("UserId",1)).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.