Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 覆盖字符串属性问题_C#_Asp.net Mvc 3_Entity Framework - Fatal编程技术网

C# 覆盖字符串属性问题

C# 覆盖字符串属性问题,c#,asp.net-mvc-3,entity-framework,C#,Asp.net Mvc 3,Entity Framework,只是一些关于我申请的背景资料。我正在开发一个ASP.NETMVC3Web应用程序,它使用EntityFramework4.1进行数据持久化。我的应用程序是分层的,因为它有一个UI层、服务层、存储库层等。我还使用Unity来反转控制容器 当用户在我的应用程序上注册时,我使用StringBuilder创建两个随机代码(电子邮件和移动验证代码)。然后,我将这两个随机代码分配给用户对象中相应的属性,如下所示 User validateUser = new User(); validateUser.fi

只是一些关于我申请的背景资料。我正在开发一个ASP.NETMVC3Web应用程序,它使用EntityFramework4.1进行数据持久化。我的应用程序是分层的,因为它有一个UI层、服务层、存储库层等。我还使用Unity来反转控制容器

当用户在我的应用程序上注册时,我使用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;
通知服务

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();
    }
现在,当我进入数据库并找到已添加的新用户时,emailVerificationCodemobileVerificationCode都是相同的。但是,如果我在代码的下面一行放一个断点

randomEmailCode = _notifyService.GenerateEmailCode();
并一直跟踪到保存,然后检查数据库中是否有新用户,emailVerificationCodemobileVerificationCode的代码与预期的不同

我无法理解为什么在运行应用程序时,它会为两个属性插入相同的代码

有人能帮忙吗

谢谢

更新

我按照简的建议做了,即像这样为每个属性输入硬编码值

validateUser.emailVerificationCode = "emailCode";
validateUser.mobileVerificationCode = "mobileCode";

再次运行应用程序,这次按预期插入了两个硬编码值。这是否意味着我的两个方法GenerateEmailCode()GenerateMobileCode()工作不正常?

生成这些随机代码的方式可能有问题。 正如其他人所指出的,问题很可能是您创建的random类的实例在时间上过于接近

尝试声明静态随机生成器:

static Random r = new Random();
然后使用静态随机生成代码:(生成代码的方式显然取决于您,但类似的内容应该会让您有所了解):

我得到两个不同的值


所以这两个代码只是在调试时不同?嗯,好吧,这很奇怪。您确定问题不在其他地方吗?因为这看起来很好。。你能试试这个吗:只需为电子邮件输入一个硬编码值,比如“emailCode”,为手机输入一个硬编码值,比如“mobile”?看看当你运行它的时候,它是否复制了其中的一个。如果一切正常,那么一定是生成方法的问题简单的问题-你的随机数/字符串是如何生成的?如果它基于任何时间,那么它将解释为什么它在调试中是不同的,而在没有调试的情况下是相同的。你能为这个随机的。。。方法?你是如何生成这些随机代码的?我猜:你初始化了一个新的随机类。但这将使用时间作为种子,当您运行它时,时间将是相同的,因此“随机”输出也将是相同的。调试时,会引入延迟,从而产生不同的值。@tgriffiths-正如我们所怀疑的,您使用的是
new Random()
,这是导致问题的原因。见我和马腾之前的评论和简·多伊的回答。
static Random r = new Random();
 public static string generateCode()
        {          
            string chrs = "abcdefghijklmnopqrstuvwxyz";
            char[] arr = chrs.ToCharArray();
            string code = "";
            for (int i = 0; i < 5; i++)
            {
                code += arr[r.Next(arr.Count())];
            }
            return code;
        }
 var firstCode  = generateCode();
 var secondCode = generateCode();