簡體   English   中英

僅在 EF Core 中的 Scaffold-DbContext 存儲過程

[英]Scaffold-DbContext Stored Procedures only in EF Core

我一直在 EF Core 中使用代碼優先,現在我需要使用數據庫優先。 有很多關於這個的問題、文檔和教程,教如何搭建數據庫

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models

然而,我唯一的要求在所有這些中都沒有。 我只需要搭建幾個存儲過程和視圖,但所有這些文檔和問題都說明了如何包含表。

我打算搭建包含所有內容的腳手架,然后手動刪除不需要的內容,但這似乎不是正確的選擇。

可以使用ExecuteSqlCommand調用原始 SQL。 所以調用存儲過程的代碼看起來像這樣:

context.Database.ExecuteSqlCommand("YourStoredProcedure @p0, @p1", 
    parameters: new[] { "Joseph", "Gates" });

更新:

正如 msdn 所說的如何從存儲過程中獲取行:

原始 SQL 查詢可用於執行存儲過程。

var user = "johndoe";

var blogs = context.Blogs
    .FromSqlRaw("EXECUTE dbo.GetMostPopularBlogsForUser {0}", user)
    .ToList();

以下示例使用從表值函數 (TVF) 中進行選擇的原始 SQL 查詢,然后通過調用 AsNoTracking 禁用更改跟蹤:

var searchTerm = ".NET";

var blogs = context.Blogs
    .FromSqlInterpolated($"SELECT * FROM dbo.SearchBlogs({searchTerm})")
    .AsNoTracking()
    .ToList();

使用 EF Core Power Tools,它允許您選擇要搭建的支架,並保存您的選擇。

以防萬一有人來到這里希望從 EntityFramework Core 執行 MySQL 數據庫中的存儲過程,下面的代碼應該可以工作。

var blogTagId = 1;
var tags = await _dbContext.BlogTags.FromSqlRaw("CALL SP_GetBlogTags({0})", blogTagId).ToListAsync(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM