[英]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();
如果您對映射存儲過程不感興趣,請參閱此帖子:
我的問題的直接答案是我無法欺騙向導導入存儲過程。
相反,這是我需要做的:
SELECT DISTINCT ID = cast(ROW_NUMBER() OVER ( ORDER BY z.Campus, z.StudentName, z.StudentID ) AS INT), -- ....
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; } }
public virtual DbSet<PerfOdomoeterDate> PerfOdomoeterDates { get; set; }
不要向“OnModelCreating”函數添加任何內容。
右鍵單擊Controllers文件夾和一個新的腳手架項:“帶有實體框架的MVC 5控制器”。
顯示的索引操作是“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); }
權限。(確保db用戶具有存儲過程的權限
我不相信你可以從向導那里做到這一點,從存儲過程生成是一個相對較新的功能。
要從代碼映射到procs,您需要執行以下操作
modelBuilder
.Entity<Blog>()
.MapToStoredProcedures();
完整的細節在這篇文章中
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.