Entity Framework 之存储过程篇

最近几天在搞CRUD,使用的是EF这个ORM,最近的项目中上了存储过程,就把在开发中的经验分享出来!我们先创建一个最基本的存储过程,脚本如下,这是一个不带参数的存储过程,我们从最简单的往上走! 复制代码 create procedure dbo.ProductsSel AS BEGIN SELECT * FROM Products END GO 复制代码 那么我们API中实际上就是执行了SQL,那么其实这非常简单,都是通过EXECUTE 存储过程名,由于我是用的是.NET Core那么无法可视化去创建EF,命令如下: 复制代码 Scaffold-DbContext "Server=.;database=EFCore;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model 复制代码 其中的这个注释可以删除,里面就是一些关于表的配置,表结构啊什么的。 以FromSql方式调用存储过程 复制代码 [Produces("application/json")] [Route("api/Banner")] public class BannerController : Controller { [HttpGet] public IEnumerable GetProducts() { using (EFCoreContext efcore = new EFCoreContext()) { var query = efcore.Products.FromSql("execute dbo.ProductsSel"); return query.ToList(); } } } 复制代码 下面我们使用PostMan进行测试。 如何带参?呵呵,可能你已经想到了,只不过还是sql的问题,当然我们需要去修改一下我们的存储过程。修改后的脚本如下。 复制代码 create procedure dbo.ProductsSel @cid int AS BEGIN SELECT * FROM Products Where ProductId = @cid END GO 复制代码 调用 复制代码 [HttpGet] public IEnumerable GetProductsById(int id) { var paramter = new SqlParameter { DbType = System.Data.DbType.Int32, ParameterName = "cid", Value = id }; using (EFCoreContext efcore = new EFCoreContext()) { var query = efcore.Products.FromSql("execute dbo.ProductsSel @cid",paramter); return query.ToList(); } } 复制代码 除了以这种东东,还有一个类叫做RelationalDatabaseFacadeExtensions,这里面提供了执行CRUD操作的类。以下是类的结构: 最简单的就可以这么写。 复制代码 string sql ="select * from xxx" efcore.Database.ExecuteSqlCommand(sql); 复制代码 如果你在看这方面内容,SqlQuery这个是EF Core 目前不支持的。我拿着小板凳坐等。。https://www.cnblogs.com/ZaraNet/p/10276965.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信