如何使用Entity Framework代码优先调用存储过程?

时间:2017-04-07 06:43:53

标签: c# sql-server entity-framework stored-procedures

我希望userid使用Entity Framework代码优先的存储过程创建删除用户。但我是Entity Framework的新手,所以我不知道怎么做这个任务。谁能告诉我怎么做到这一点?

到目前为止,这是我的代码:

SQL Server中的存储过程:

CREATE PROCEDURE [dbo].[DeleteUserById]
    @UserId bigint
AS
BEGIN   
    DELETE FROM [dbo].[Users] 
    WHERE id = @UserId
END

现在可以在代码中使用此存储过程吗?我不知道有谁请告诉我。

这是我的班级模型构建者:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext() : base("DefaultConnection")
    {
    }

    public virtual DbSet<UserInfo> UserInfo { get; set; } 

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

    public virtual ObjectResult<List<Users>> GetUsers()
    { 
        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<List<UserInfo>>("GetUsers");
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Users>()
            .MapToStoredProcedures(s => s.Delete(u => u.HasName("DeleteUserById", "dbo")
                                            .Parameter(b => b.id, "userid"))
            );
    }  
}

这是我在控制器中的删除方法:

public string DeleteUsers(int id)
{
        //here how can call this sp and delete this user
}

如果有人知道,那么请帮我完成这项任务。

2 个答案:

答案 0 :(得分:2)

您可以使用数据库上的ExecuteSqlCommand方法执行此操作。

this.Database.ExecuteSqlCommand(
   "[dbo].[DeleteUserById] @UserId", 
   new SqlParameter("@UserId", id));

<强>更新

(回答评论)

[Table("Users")]
public class ApplicationUser
{
}

答案 1 :(得分:1)

使用EF可以通过这种方式实现。如果您不需要MapToStoredProcedures

public void DeleteUsers(int id)
{
    SqlParameter idParam = new SqlParameter("@UserId", id);
    context.Database.ExecuteSqlCommand("DeleteUserById @UserId", idParam);
}

编辑并且您没有从存储过程返回任何内容,因此方法签名应为void