2016-12-08 12 views
0

SQL 2008クエリでは、私はただ実行し、成功すると1を返します。今、MVC 5 EF dbcontextでこれをどうやって行うのですか?DbContextでMVC 5でストアドプロシージャを使用するには?

usp_CreateNewAccount usernamehere, passwordhere, emailhere 

Entity Frameworkを使用してコントローラアイテムを作成し、コントローラのCreateメソッドを編集しました。

db.Users.Add(user); 
db.Users.SqlQuery("usp_CreateNewAccount fsdfsdf, sdfsdfsd, dasda"); 
db.SaveChanges(); 

この結果は得られません。私はユーザーを作成することはできません。可能な解決策はありますか?そして、あなたはこのようなパラメータでDbContext.Database.SqlQueryを使用することができます

CREATE PROCEDURE usp_CreateNewAccount 
@usernamehere NVARCHAR(...), 
@passwordhere NVARCHAR(...), 
@emailhere NVARCHAR(...) 
AS 
BEGIN 
-- insert query here 
END 

+0

エンティティフレームワークでの私の経験は、自動生成コードにはプロシージャが必ずしも機能しないということです。あなたのコードでは、ストアドプロシージャを呼び出すときにパラメータが表示されません。ユーザーからSQlQueryを呼び出すこともベスト・アイデアではなく、むしろdb.Database.SqlQueryを使用します。あなたの手続きに含まれるものも重要です。主な問題を表す可能性があるため、ここに含める必要があります。 – JadaVonRuth

+0

次に、なぜユーザーをUsersコレクションに追加するのか、ストアドプロシージャを呼び出す直後です。その時点では、ユーザーはまだデータベースに存在できません。そのため、プロシージャはそのレコードでは機能しません。 – JadaVonRuth

+0

@JadaVonRuth dbcontextを使用するのが苦労しています。なぜなら、MVC 5の新機能、VS 2015はエラーを表示せず、空白のページしか表示しませんでした。 – ronscript

答えて

1

は、あなたが手続きusp_CreateNewAccountを保存したとし

using (var db = new DataContext()) // DataContext is your DBContext name 
{ 
    var userName = new SqlParameter() 
    { 
     ParameterName = "usernamehere", 
     DbType = DbType.String, 
     Value = "fsdfsdf" 
    }; 

    var password = new SqlParameter() 
    { 
     ParameterName = "passwordhere", 
     DbType = DbType.String, 
     Value = "sdfsdfsd" 
    }; 

    var email = new SqlParameter() 
    { 
     ParameterName = "emailhere", 
     DbType = DbType.String, 
     Value = "dasda" 
    }; 

    // suppose "User" table exists with "db.Users" as DbSet<User> collection 
    db.Database.SqlQuery<User>("EXEC usp_CreateNewAccount {0}, {1}, {2}", new Object[] { userName, password, email }); 
} 

挿入して保存するので、ここでdb.Users.Adddb.SaveChangesメソッドを使用する理由はありません操作はすでにストアドプロシージャクエリによって処理されています。

関連する問題