[英]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.