仅在 EF Core 中的 Scaffold-DbContext 存储过程

Ash*_*ani 7 c# sql-server entity-framework entity-framework-core ef-core-3.0

我一直在 EF Core 中使用代码优先,现在我需要使用数据库优先。有很多关于此的问题、文档和教程,教授如何构建数据库

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

然而,我在这里唯一的要求在所有这些中都缺失了。我只需要构建一些存储过程和视图,但所有这些文档和问题都涉及如何包含表。

我打算搭建包括所有内容的脚手架,然后手动删除不需要的内容,但这似乎不是正确的选择。

Ste*_*pUp 6

可以使用 调用原始 SQL ExecuteSqlCommand。因此调用存储过程的代码将如下所示:

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

更新:

正如 msdn 所说的如何从存储过程中获取行:

原始 SQL 查询可用于执行存储过程。

var user = "johndoe";

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

以下示例使用从表值函数 (TVF) 中进行选择的原始 SQL 查询,然后通过调用 AsNoTracking 禁用更改跟踪:

var searchTerm = ".NET";

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


Eri*_*kEJ 5

使用 EF Core Power Tools,它允许您选择要搭建的内容,并保存您的选择。

  • 哦,它真是一个很棒的工具,它只是缺少存储过程。 (4认同)