我正在使用Visual Studio 2017实现Asp.Net核心Web API,实体框架核心,数据库第一种方法.我已经设法基于现有数据库生成上下文和类文件.我需要使用我的上下文访问存储过程.在早期版本的实体框架中,通过在向导中选择存储过程对象并生成包含这些对象的edmx,可以很简单.然后,我可以通过实体框架公开的复杂类型对象访问存储过程.我如何在实体框架核心中做类似的事情.一个例子会有帮助吗?
解决方法
数据库第一种方法在EF Core中没有edmx文件.相反,你必须使用Scaffold-DbContext
安装Nuget包Microsoft.EntityFrameworkCore.Tools和Microsoft.EntityFrameworkCore.sqlServer.Design
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.sqlServer -OutputDir Models
但这不会得到你的存储过程.它仍在开发中,跟踪问题#245
但是,要执行存储过程,请使用执行RAW SQL查询的FromSql方法
例如
var products= context.Products .Fromsql("EXECUTE dbo.GetProducts") .ToList();
用于参数
var productCategory= "Electronics"; var product = context.Products .Fromsql("EXECUTE dbo.GetProductByCategory {0}",productCategory) .ToList();
要么
var productCategory= new sqlParameter("productCategory","Electronics"); var product = context.Product .Fromsql("EXECUTE dbo.GetProductByName @productCategory",productCategory) .ToList();
执行RAW SQL查询或存储过程有一些限制.您不能将它用于INSERT / UPDATE / DELETE.如果要执行INSERT,UPDATE,DELETE查询,请使用ExecutesqlCommand
var categoryName = "Electronics"; dataContext.Database .ExecutesqlCommand("dbo.InsertCategory @p0",categoryName);