entity-framework – 使用Entity框架核心生成和访问存储过程

我正在使用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);

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....