簡體   English   中英

MVC 5,EF 6和“數據庫中的代碼優先”存儲過程

[英]MVC 5, EF 6, and “Code First from Database” Stored Procedures

在搜索答案時,即使使用引號中的“數據庫中的代碼優先”關鍵字,我發現答案沒有解決具體的術語,所以我只是特別強調“數據庫中的代碼優先”這個問題。 。

在使用Entity Framework 6的ASP.NET MVC 5 Web應用程序中,我希望能夠使用“ADO.NET實體數據模型”向導映射到數據庫上的現有存儲過程。

我為什么要問這個問題,我希望完成什么?

此特定存儲過程是參數化查詢,其中用戶(在視圖中)將通過表單提交日期范圍並在表中接收該查詢的結果。 在SQL Server端,很容易:聲明兩個日期並獲取查詢結果。

我希望用戶從View中“簡單地”選擇一個日期范圍,並查看由存儲過程查詢提供的緊接在下面的結果。

下面是顯示我嘗試使用向導映射存儲過程的屏幕截圖。

1.指定數據庫上下文的名稱

指定數據庫上下文的名稱

2.指定“代碼優先於數據庫”

指定“代碼優先於數據庫”

3.選擇數據庫連接

選擇數據庫連接

4.沒有可用的存儲過程

我還注意到導入存儲過程的選項是灰色的。

沒有存儲過程可用

編輯:Tarun提到由於缺乏權限,存儲過程沒有顯示。

實體框架提供API來調用存儲過程,但您甚至可以將存儲過程映射到模型。

請訪問此鏈接: https//msdn.microsoft.com/en-us/data/dn468673.aspx

要將模型綁定到存儲過程:

 modelBuilder.Entity<Blog>().MapToStoredProcedures();

如果您對映射存儲過程不感興趣,請參閱此帖子:

如何在實體框架6(代碼優先)中調用存儲過程?

我的問題的直接答案是我無法欺騙向導導入存儲過程。

相反,這是我需要做的:

  1. 確保我的存儲過程具有int類型的ID列
 SELECT DISTINCT ID = cast(ROW_NUMBER() OVER ( ORDER BY z.Campus, z.StudentName, z.StudentID ) AS INT), -- .... 
  1. 在Models文件夾中,手動創建我的類和屬性定義。
 public class PerfOdomoeterDate { public int ID { get; set; } public string Campus { get; set; } public string StudentName { get; set; } public int StudentID { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public double Credits { get; set; } } 
  1. 在數據庫上下文文件中,添加:

public virtual DbSet<PerfOdomoeterDate> PerfOdomoeterDates { get; set; }

  1. 不要向“OnModelCreating”函數添加任何內容。

  2. 右鍵單擊Controllers文件夾和一個新的腳手架項:“帶有實體框架的MVC 5控制器”。

  3. 顯示的索引操作是“hello world”示例,以確保與存儲過程建立基本聯系。 我肯定會使用視圖模型,參數等來自定義它。但是這應該清楚地顯示如何使代碼工作。

 private PerformanceContext db = new PerformanceContext(); [HttpGet] public ActionResult Index() { // These will be filled by form submission DateTime d1 = Convert.ToDateTime("12/1/2014"); DateTime d2 = Convert.ToDateTime("5/1/2015"); // supply parameter values required by the stored procedure object[] parameters = { new SqlParameter("@date1",SqlDbType.DateTime) {Value=d1}, new SqlParameter("@date2",SqlDbType.DateTime) {Value=d2} }; // populate the list by calling the stored procedure and supplying parameters IEnumerable<PerfOdomoeterDate> query = db.Database.SqlQuery<PerfOdomoeterDate>("PerfOdomoeterDate @date1, @date2", parameters).ToList(); return View(query); } 
  1. 重建並查看索引。 應該沒有編譯或運行時錯誤。 視圖應顯示所需的數據。

權限。(確保db用戶具有存儲過程的權限

我不相信你可以從向導那里做到這一點,從存儲過程生成是一個相對較新的功能。

要從代碼映射到procs,您需要執行以下操作

modelBuilder 
  .Entity<Blog>() 
  .MapToStoredProcedures();

完整的細節在這篇文章中

https://msdn.microsoft.com/en-us/data/dn468673.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM