只是关于我的应用程序的一些背景知识。我正在开发一个ASP.Net MVC 3 Web应用程序,它使用Entity Framework 4.1进行数据持久化。我的应用程序是分层的,它有一个UI层,服务层,Repository层等。我也使用Unity来控制我的Inversion of Control Container。覆盖字符串属性问题
当用户在我的应用程序中注册时,我使用StringBuilder创建了两个随机代码(电子邮件和手机验证码)。然后我将这两个随机代码分配给它们在用户对象中的相应属性,见下文。
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码如预期的那样不同。
我不明白为什么当我运行该应用程序时,它会为两个属性插入相同的代码。
任何人都可以请帮忙吗?
谢谢。
UPDATE
我一样珍建议,即把在硬编码值的每个属性,像这样
validateUser.emailVerificationCode = "emailCode";
validateUser.mobileVerificationCode = "mobileCode";
再次运行应用程序,这时候两个硬编码值插入如预期。这是否意味着我的两个方法GenerateEmailCode()和GenerateMobileCode()无法正常工作?
所以这两个代码只有当你在调试? – Thousand
@JaneDoe是的简,只有当我调试时才会有所不同。 – tgriffiths
当你运行它时,哪些代码是重复的?移动或电子邮件代码? – Thousand