在搜索答案时,即使使用关键字" Code First from Database"在引号中,我发现答案没有涉及具体的术语,因此我特别强调了#34; Code First from Database"只要。
在使用Entity Framework 6的ASP.NET MVC 5 Web应用程序中,我希望能够使用" ADO.NET实体数据模型"向导映射到数据库上的现有存储过程。
为什么我会问这个问题以及我希望完成什么?
此特定存储过程是参数化查询,其中用户(在视图中)将通过表单提交日期范围并在表中接收该查询的结果。在SQL Server端,很容易:声明两个日期并获取查询结果。
我希望用户,从视图到"简单地"选择一个日期范围,并查看存储过程查询提供的紧接下面的结果。
下面是显示我尝试使用向导映射存储过程的屏幕截图。
1。指定数据库上下文的名称
2。在数据库中指定"代码优先"
第3。选择数据库连接
4。没有可用的存储过程
我还注意到导入存储过程的选项是灰色的。
答案 0 :(得分:3)
实体框架提供API来调用存储过程,但您甚至可以将存储过程映射到模型。
查看此链接: https://msdn.microsoft.com/en-us/data/dn468673.aspx
将模型绑定到存储过程:
modelBuilder.Entity<Blog>().MapToStoredProcedures();
如果您对映射存储过程不感兴趣,请参阅以下文章:
How to call Stored Procedure in Entity Framework 6 (Code-First)?
答案 1 :(得分:3)
我的问题的直接答案是我无法欺骗向导导入存储过程。
相反,这是我需要做的事情:
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); }
答案 2 :(得分:2)
权限。(确保db用户具有存储过程的权限
答案 3 :(得分:1)
我不相信你可以从向导那里做到这一点,从存储过程生成是一个相对较新的功能。
要从代码映射到proc,您需要执行以下操作
modelBuilder
.Entity<Blog>()
.MapToStoredProcedures();
完整的详细信息在这篇文章中