You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在.NET 6 EF Core类库项目中创建存储过程?

在EF Core(.NET 6)代码优先模式下创建存储过程的解决方案

EF Core不像旧版EF6那样提供内置的存储过程自动生成工具,代码优先模式下得通过手动编写迁移脚本来创建存储过程,以下是具体步骤:

1. 生成空迁移

先创建一个空的迁移文件,专门用来存放存储过程的创建脚本:

  • 使用Package Manager Console:
    Add-Migration CreateStoredProcedure_GetUserById
    
  • 使用.NET CLI:
    dotnet ef migrations add CreateStoredProcedure_GetUserById
    

2. 编辑迁移文件

打开生成的迁移文件,在Up方法中写入创建存储过程的SQL,Down方法中写入删除脚本(用于回滚迁移):

protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.Sql(@"
        CREATE PROCEDURE GetUserById
            @UserId INT
        AS
        BEGIN
            SELECT Id, Name, Email
            FROM Users
            WHERE Id = @UserId
        END
    ");
}

protected override void Down(MigrationBuilder migrationBuilder)
{
    migrationBuilder.Sql(@"DROP PROCEDURE GetUserById");
}

3. 应用迁移到数据库

执行命令将迁移脚本应用到数据库,完成存储过程的创建:

  • Package Manager Console:
    Update-Database
    
  • .NET CLI:
    dotnet ef database update
    

4. 在DbContext中封装存储过程调用

为了方便调用,可以在你的DbContext中添加方法,通过EF Core的FromSqlRaw(查询数据)或ExecuteSqlRaw(执行非查询)来调用存储过程,注意使用参数化查询避免SQL注入:

public async Task<User> GetUserByIdAsync(int userId)
{
    var user = await Users.FromSqlRaw("EXEC GetUserById @UserId = {0}", userId)
                          .FirstOrDefaultAsync();
    return user;
}

// 带多参数的示例
public async Task<IEnumerable<User>> GetUsersByRoleAsync(string roleName, int pageSize)
{
    var parameters = new[]
    {
        new SqlParameter("@RoleName", roleName),
        new SqlParameter("@PageSize", pageSize)
    };
    return await Users.FromSqlRaw("EXEC GetUsersByRole @RoleName, @PageSize", parameters)
                      .ToListAsync();
}

如果需要执行无返回值的存储过程(比如插入/更新操作),可以用ExecuteSqlRawAsync:

public async Task UpdateUserStatusAsync(int userId, bool isActive)
{
    await Database.ExecuteSqlRawAsync(
        "EXEC UpdateUserStatus @UserId = {0}, @IsActive = {1}",
        userId, isActive);
}

内容的提问来源于stack exchange,提问作者niler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 12:30:52