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<Products> 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<Products> 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 目前不支持的。我拿着小板凳坐等。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM