2016-10-07 5 views
0

私は自分のパスワードをsaltにしようとしています。ここで出力パラメータでEntity Frameworkプロシージャを呼び出すときにエラーが発生しました

のデータ型はnvarchar(512)としての私のPWを返す私SPROCです:

public virtual ObjectResult<string> g_GetPWFromEmail(string emailAddress, ObjectParameter encrPass) 
{ 
    var emailAddressParameter = emailAddress != null ? 
     new ObjectParameter("emailAddress", emailAddress) : 
     new ObjectParameter("emailAddress", typeof(string)); 

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<string>("g_GetPWFromEmail", emailAddressParameter, encrPass); 
} 

そして、私はそれがエラーをそれ呼び出す:ここ

alter proc [dbo].g_GetPWFromEmail 
@emailAddress nvarchar(50), 
@EncrPass nvarchar(512) OUTPUT 

as 
if ((Select count(*) from users where emailAddress = @emailAddress) > 0) 
begin 
    select @EncrPass = password 
    from users 
    where emailAddress = @emailAddress 
end 
else 
begin 
    select @EncrPass = '' 
end 

はemdxファイルにスキャフォールドしたものですアウト...わからないどのようにこれを呼び出すために - ここで私はこれまで持っているものである:私は私を返すために、これを呼び出すにはどうすればよい

//Pull Current Encrypted Password from DB 
string DbPw = ""; 
ObjectParameter DBPW1 = null; 
var DbPassWord = databaseManager.g_GetPWFromEmail(model.Username, DBPW1).ToList(); 
if (DbPassWord != null && DbPassWord.Count() > 0) 
{ 
    DbPw = Convert.ToString(DBPW1); 
} 

をDBからハッシュされたpw?私は良い方法があることを知っていますが、いくつかの方法を試してきましたが、構文をかなり正しいものにすることはできません。

+0

保存されたprocのポイントは何ですか?ハッシュがデータベースにあるものと一致するかどうかを確認しようとしていますか(それはあなたがするべきものなのですか?) – DavidG

+0

あなたのメソッド 'g_GetPWFromEmail()'は文字列を返すので、文字列に変換する必要はありません。文字列です...小文字で始まり、 [Microsoft命名規則](https://msdn.microsoft.com/en-us/library/ms229045(v = vs.110).aspx)に対して)。 '〜= null && Count()> 0'の代わりに' string.IsNullorWhiteSpace() 'を使うべきです。手順を実行する方法は非常に古いです。[Execute SP](http://www.entityframeworktutorial.net/EntityFramework4.3/execute-stored-procedure-using-dbcontext.aspx)をお読みください。 –

+0

まさに - はい - ハッシュがデータベースにあるものと一致するかどうかをチェックしようとしています。私はこのコードを動作させることができません!どんな考えがされても結構です。リンク先のサイトを見ると、ヘルパーファイルが表示されます。 –

答えて

1

を設定せずに作業を行いますエンティティ:

using (var context = new MyContext()) { 
    string encryptedPassword = context.Users 
     .Where(u => u.emailAddress == emailAddress) 
     .Select(u => u.password) 
     .SingleOrDefault(); 
} 
+0

ありがとう!これは私が探していたものです。まだ細部を整えています...調整してください。 –

0

null参照(DPBW1)をメソッドに渡します。したがって、このメソッドはその参照を出力値で更新することはできません。

ObjectParameter DBPW1 = null; 
var DbPassWord = databaseManager.g_GetPWFromEmail(model.Username, DBPW1).ToList(); 

私はEFでこれを行っていないが、SQL ADO.NETで、あなたはまだパラメータを作成し、ちょうどprocが実行され、その後の後、パラメータ値が移入され、出力としてパラメータの方向をマーク。

ここでも同じことができるはずです。

編集ObjectParameterは、パラメータの方向を定義していないようです。たぶんそれは自動的に行われます - 私はそれが動作するかどうかを確認するためにそれを試してみましょう。

var DPBW1 = new ObjectParameter("EncrPass", typeof(string)); 

EDITそれはあなたのようにテーブルを設定したと仮定すると、あなたのユースケースは本当にこのシンプルであれば、通常のLINQツーエンティティが動作するパラメータ方向

関連する問題