簡體   English   中英

C#創建員工。 使用EF保存到SQL數據庫

[英]C# Create employee. Save to SQL Database using EF

我正在將一名員工保存到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.";
                }
            }
        }            
    }

有什么提示我可以嘗試嗎?

親切的問候,克里斯蒂安

您應該在用戶名字段上具有唯一約束。 不確定在EF中是先執行代碼,先進行建模還是先進行數據庫處理,但是您應該可以通過Google搜索如何使用正確的方法在數據庫中進行設置。 如果您嘗試保存一個,則會拋出異常,以確保您不能保存多個。

您還可以使用LINQ語句將用戶列表限制為要創建的用戶名,然后您只需要檢查布爾值以查看是否返回行即可。 這樣,您不必讀取整個數據庫表(“ 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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM