私のアプリケーションに関する背景だけです。データの永続化に Entity Framework 4.1 を使用する ASP.Net MVC 3 Web アプリを開発しています。私のアプリケーションは階層化されており、UI レイヤー、サービス レイヤー、リポジトリ レイヤーなどがあります。制御コンテナーの反転にも Unity を使用しています。
ユーザーがアプリケーションに登録すると、 StringBuilderを使用して 2 つのランダム コード (電子メールとモバイルの確認コード) を作成します。次に、これら 2 つのランダム コードをユーザー オブジェクトの適切なプロパティに割り当てます。以下を参照してください。
User validateUser = new User();
validateUser.firstName = model.firstName.Trim();
validateUser.lastName = model.lastName.Trim();
validateUser.email = model.Email.Trim();
//Create Email and Mobile Verification Codes
string randomEmailCode = "";
randomEmailCode = _notifyService.GenerateEmailCode();
validateUser.emailVerificationCode = randomEmailCode;
string randomMobileCode = "";
randomMobileCode = _notifyService.GenerateMobileCode();
validateUser.mobileVerificationCode = randomMobileCode;
NotifyService
public string GenerateEmailCode()
{
StringBuilder builder = new StringBuilder();
builder.Append(RandomString(4, true));
builder.Append(RandomNumber(1000, 9999));
builder.Append(RandomString(2, false));
return builder.ToString();
}
public string GenerateMobileCode()
{
StringBuilder builder = new StringBuilder();
builder.Append(RandomString(3, true));
builder.Append(RandomNumber(1000, 9999));
builder.Append(RandomString(2, false));
return builder.ToString();
}
private int RandomNumber(int min, int max)
{
Random random = new Random();
return random.Next(min, max);
}
private string RandomString(int size, bool lowerCase)
{
StringBuilder builder = new StringBuilder();
Random random = new Random();
char ch;
for (int i = 0; i < size; i++)
{
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
builder.Append(ch);
}
if (lowerCase)
return builder.ToString().ToLower();
return builder.ToString();
}
次に、ユーザーを DBcontext に追加し、SaveChanges() メソッドを呼び出して、新しいユーザーをデータベースに保存します。
_accountService.AddUser(validateUser);
_accountService.Save();
ここで、データベースにアクセスして、追加された新しいユーザーを見つけると、emailVerificationCodeとmobileVerificationCodeはどちらも同じです。ただし、コードの次の行にブレークポイントを配置すると
randomEmailCode = _notifyService.GenerateEmailCode();
保存までトレースしてから、データベースで新しいユーザーを確認します。予想どおり、 emailVerificationCodeとmobileVerificationCodeの両方のコードが異なります。
アプリケーションを実行すると、両方のプロパティに同じコードが挿入される理由がわかりません。
誰でもこれを手伝ってもらえますか?
ありがとう。
アップデート
ジェーンが提案したように、つまり、各プロパティにハードコードされた値を次のように入力しました
validateUser.emailVerificationCode = "emailCode";
validateUser.mobileVerificationCode = "mobileCode";
アプリケーションを再度実行すると、今度はハードコードされた 2 つの値が期待どおりに挿入されました。これは私の 2 つのメソッドGenerateEmailCode()とGenerateMobileCode()が正しく機能していないということですか?