2017-04-07 70 views
0

我想通过使用实体框架中的存储过程的代码首先创建删除用户。但是我对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

[这个问题](http://stackoverflow.com/questions/643880/commandtype-text-vs-commandtype-存储过程)描述了两种可能的方式及其好处。 –

+0

但在这段代码中,我该如何写这段代码是正确还是错误? – coderwill

+0

您可以使用实体框架linq命令删除用户。 [检查此答案](http://stackoverflow.com/questions/31672899/how-do-i-delete-single-record-from-table-using-ef-6-1-1)。谢谢 –

回答

2

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

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

UPDATE

(回答评论)

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

我写这段代码并添加OnModelCreating方法,然后去登录获取错误无效的对象名'dbo.ApplicationUsers'。你可以请怎么修复它 – coderwill

+0

那么,你的表被称为'dbo.Users',但它正在寻找'dbo.ApplicationUsers'尝试将'Table(“Users”)属性应用于'ApplicationUsers'类。 – briantyler

+0

意味着IDK请给我暗示该怎么办 – coderwill

1

使用EF可以这样实现。如果你不需要MapToStoredProcedures

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

编辑:而不必返回从存储过程的话,那么方法signiture应该是void

+0

sp_MyStoredProc这里replce到我的SP名??因为我可以定义在课堂上? – coderwill

+0

这是正确的... –

+0

所以我写这段代码是正确的?在我的que – coderwill

相关问题