我希望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
}
如果有人知道,那么请帮我完成这项任务。
答案 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
。