仅在 EF Core 中的脚手架-DbContext 存储过程
Scaffold-DbContext Stored Procedures only in EF Core
我一直在 EF Core 中使用代码优先,现在我需要使用数据库优先。有很多关于此的问题、文档和教程,教授如何 scaffold a database、
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models
然而,我这里唯一的要求在所有这些中都缺失了。我只需要搭建几个存储过程和视图的脚手架,但所有这些文档和问题都是关于如何包含表的。
我本来打算搭建包括所有内容的脚手架,然后手动删除不需要的,但这似乎不是正确的选择。
使用 EF Core Power Tools,它可以让您select搭建脚手架,并节省您的select离子。
可以使用 ExecuteSqlCommand
调用原始 SQL。所以调用存储过程的代码应该是这样的:
context.Database.ExecuteSqlCommand("YourStoredProcedure @p0, @p1",
parameters: new[] { "Joseph", "Gates" });
更新:
As msdn says关于如何从存储过程中获取行:
Raw SQL queries can be used to execute a stored procedure.
var user = "johndoe";
var blogs = context.Blogs
.FromSqlRaw("EXECUTE dbo.GetMostPopularBlogsForUser {0}", user)
.ToList();
The following example uses a raw SQL query that selects from a
Table-Valued Function (TVF), then disables change tracking with the
call to AsNoTracking:
var searchTerm = ".NET";
var blogs = context.Blogs
.FromSqlInterpolated($"SELECT * FROM dbo.SearchBlogs({searchTerm})")
.AsNoTracking()
.ToList();
以防万一有人来到这里希望从 EntityFramework Core 执行 MySQL 数据库中的存储过程,下面的代码应该可以工作。
var blogTagId = 1;
var tags = await _dbContext.BlogTags.FromSqlRaw("CALL SP_GetBlogTags({0})", blogTagId).ToListAsync();
我一直在 EF Core 中使用代码优先,现在我需要使用数据库优先。有很多关于此的问题、文档和教程,教授如何 scaffold a database、
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models
然而,我这里唯一的要求在所有这些中都缺失了。我只需要搭建几个存储过程和视图的脚手架,但所有这些文档和问题都是关于如何包含表的。
我本来打算搭建包括所有内容的脚手架,然后手动删除不需要的,但这似乎不是正确的选择。
使用 EF Core Power Tools,它可以让您select搭建脚手架,并节省您的select离子。
可以使用 ExecuteSqlCommand
调用原始 SQL。所以调用存储过程的代码应该是这样的:
context.Database.ExecuteSqlCommand("YourStoredProcedure @p0, @p1",
parameters: new[] { "Joseph", "Gates" });
更新:
As msdn says关于如何从存储过程中获取行:
Raw SQL queries can be used to execute a stored procedure.
var user = "johndoe";
var blogs = context.Blogs
.FromSqlRaw("EXECUTE dbo.GetMostPopularBlogsForUser {0}", user)
.ToList();
The following example uses a raw SQL query that selects from a Table-Valued Function (TVF), then disables change tracking with the call to AsNoTracking:
var searchTerm = ".NET";
var blogs = context.Blogs
.FromSqlInterpolated($"SELECT * FROM dbo.SearchBlogs({searchTerm})")
.AsNoTracking()
.ToList();
以防万一有人来到这里希望从 EntityFramework Core 执行 MySQL 数据库中的存储过程,下面的代码应该可以工作。
var blogTagId = 1;
var tags = await _dbContext.BlogTags.FromSqlRaw("CALL SP_GetBlogTags({0})", blogTagId).ToListAsync();