2017-04-07 10 views
0

Entity Frameworkでストアドプロシージャを使用して、useridでdelete userをコードファーストで作成します。しかし、私は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")) 
      ); 
    } 
} 

これは、コントローラの私のdeleteメソッドです:

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- storedprocedure)は、2つの可能な方法とその利点について説明しています。 –

+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'クラスに適用してみてください。 IdentityUser { タスク GenerateUserIdentityAsync(UserManagerのマネージャー、文字列authenticationType)非同期公共 { //はauthenticationTypeが一致している必要があります: – briantyler

+0

が意味する、私はどのようにこれは私のパブリッククラスApplicationUserある – 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は私のspという名前に戻ります??私はクラスで定義できますか? – coderwill

+0

それは正しいです... –

+0

私はこのコードを書いているので正解ですか?私のqueで – coderwill

関連する問題