2013-03-31 46 views
0

所以,我嘗試使用實體框架和C#創建一個註冊方法,這是方法:註冊使用實體框架

//Button create new account 
    private void BtnSignUp_Click(object sender, EventArgs e) 
    { 
     IEnumerable<DriverAcount> list = from a in context.DriverAcounts select a; 
     foreach (var Ac in list) 
     { 
       if (TxBoxNewUserName.Text != Ac.Login) 
       { 
        if (TxtBoxPASS1.Text == TxBoxPass.Text) 
        { 
         Ac.Login = TxBoxNewUserName.Text; 
         Ac.Password = TxtBoxPASS1.Text; 
         context.DriverAcounts.Add(Ac); 
         MessageBox.Show("the account is create succefuly"); 
         TxBoxNewUserName.Text = ""; 
         TxtBoxPASS1.Text = ""; 
         TxBoxPass.Text = ""; 
         break; 
        } 

        else 
        { 
         MessageBox.Show("the two passwords didn't matched"); 
        } 

        TxBoxNewUserName.Text = ""; 
        TxtBoxPASS1.Text = ""; 
        TxBoxPass.Text = ""; 
        continue; 
       } 
      else 
      { 
       MessageBox.Show("this username is already exist, please choose another one"); 
       TxBoxNewUserName.Text = ""; 
       TxtBoxPASS1.Text = ""; 
       TxBoxPass.Text = ""; 
       break; 
      } 

     } 
     context.SaveChanges(); 
    } 

的問題是,當我想添加一個新用戶通常應該找如果在數據庫中存在或不是,但它沒有這樣做的權利,例如,如果我們在DB 名1名2和到文本框有兩個名字,我們有名2它將增加在NAME2 DB即使已經存在。 因此,如果有人有一個想法,我會很感激。

回答

0

您需要再次查看您的代碼並準確瞭解它的功能 - 您是否連接了調試器並逐步完成了它?如果檢索到的名字與文本框中的名字不匹配,驅動程序名稱將始終在foreach循環的第一次迭代中創建。所有其他人將被忽略。

你可以試試這個。當你只想檢查是否已經存在時,不需要查詢所有記錄(就像你現在在做的那樣)。

private void BtnSignUp_Click(object sender, EventArgs e) 
{ 
    // This performs a case sensitive match on the login name, you'll need to change it if you want to ignore case 
    DriverAcount existingAccount = context.DriverAcounts.FirstOrDefault(d => d.Login == TxBoxNewUserName.Text); 

    if (existingAccount != null) 
    { 
      MessageBox.Show("This username already exists, please choose another one."); 
    } 
    else 
    { 
      if (TxtBoxPASS1.Text == TxBoxPass.Text) 
      { 
        Ac.Login = TxBoxNewUserName.Text; 
        Ac.Password = TxtBoxPASS1.Text; 
        context.DriverAcounts.Add(Ac); 

        // Only need to call this if you've made changes, so I've moved it here 
        context.SaveChanges(); 

        MessageBox.Show("The account was created successfully"); 
      } 
      else 
      { 
        MessageBox.Show("The two passwords didn't match each other."); 
      } 
    } 

    TxBoxNewUserName.Text = ""; 
    TxtBoxPASS1.Text = ""; 
    TxBoxPass.Text = ""; 
} 
+0

Thnx兄弟你對,我沒有看好我的代碼,是的,現在它工作完美。 – HASSAROV