C#创建员工。使用EF保存到SQL数据库

时间:2013-11-10 22:32:24

标签: c# sql-server entity-framework

我正在将员工保存到SQL数据库中。我正在保存名字,姓氏,用户名和密码。我该怎么做才能防止保存多个相同的用户名?

我试过这个:

    private void CreateEmployee()
    {
        using (var db = new TidrapportDBEntities())
        {
            var user = (from p
                       in db.Login
                        where p.username != null
                        select p).ToList();

            foreach (var vUser in user)
            {
                if (vUser.username == textBoxUsername.Text)
                {
                    labelSuccessFail.Visible = true;
                    labelSuccessFail.Text = "Accountname already exist.";

                    break;
                }
                else
                {
                    var userInfo = new Login();
                    var persInfo = new PersonalInformation();

                    persInfo.firstname = textBoxFirstname.Text;
                    persInfo.lastname = textBoxLastname.Text;

                    userInfo.username = textBoxUsername.Text;
                    userInfo.password = textBoxPassword.Text;
                    userInfo.employeeId = persInfo.employeeId;

                    db.Login.Add(userInfo);
                    db.PersonalInformation.Add(persInfo);
                    db.SaveChanges();

                    textBoxFirstname.Text = string.Empty;
                    textBoxLastname.Text = string.Empty;
                    textBoxUsername.Text = string.Empty;
                    textBoxPassword.Text = string.Empty;

                    labelSuccessFail.Visible = true;
                    labelSuccessFail.Text = "Successfully created account.";
                }
            }
        }            
    }

我可以尝试哪些提示?

亲切的问候, 克里斯蒂安

1 个答案:

答案 0 :(得分:0)

您应该在用户名字段上有唯一约束。不确定您是先执行代码,先建立模型还是先在数据库中建立数据库,但您应该能够使用正确的方法谷歌如何在数据库中设置它。如果你试图保存一个,那将抛出异常,这样就确保你不能有多个。

您还可以使用LINQ语句将用户列表限制为您要创建的用户名,然后您只需检查bool以查看是否返回了行。这样你就不必阅读整个数据库表(你的“toList”正在做)。

在您的代码示例中,您将获得拥有用户名的所有用户,然后循环它们,但您的条件代码仅在第一个与您尝试的用户名匹配时才有效保存,否则你将尝试第二次重新创建一个副本。因此,为了让您的代码正常工作,您可以尝试:

   private void CreateEmployee()
    {
        using (var db = new TidrapportDBEntities())
        {
            var user = (from p
                       in db.Login
                        where p.username != null
                        select p).ToList();

            bool found = false;
            foreach (var vUser in user)
            {
                if (vUser.username == textBoxUsername.Text)
                {
                    found = true;
                    labelSuccessFail.Visible = true;
                    labelSuccessFail.Text = "Accountname already exist.";

                    break;
                }
           }

           if(!found)     
           {
                    var userInfo = new Login();
                    var persInfo = new PersonalInformation();

                    persInfo.firstname = textBoxFirstname.Text;
                    persInfo.lastname = textBoxLastname.Text;

                    userInfo.username = textBoxUsername.Text;
                    userInfo.password = textBoxPassword.Text;
                    userInfo.employeeId = persInfo.employeeId;

                    db.Login.Add(userInfo);
                    db.PersonalInformation.Add(persInfo);
                    db.SaveChanges();