2017-04-07 71 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

相關問題