2016-08-15 70 views
0

錯誤:LINQ和自動遞增

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in System.Data.Linq.dll Additional information: Violation of PRIMARY KEY constraint 'PK_users'. Cannot insert duplicate key in object 'dbo.users'. The duplicate key value is (0). The statement has been terminated.

代碼:

private void register_Click(object sender, RoutedEventArgs e) 
{ 
    var _user = new user(); 
    if (username.Text.Length == 0) 
    { 
     username.Text = "Geef gebruikersnaam in"; 
    } 
    else if (password.Text.Length == 0) 
    { 
     password.Text = "Voer wachtwoord in"; 
    } 
    else if (password.Text != passcon.Text) 
    { 
     password.Text = "Wachtwoorden niet gelijk"; 
    } 
    else 
    { 
     using (MD5 md5Hash = MD5.Create()) 
     { 
      _user.password = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(password.Text)); 
     } 
     _user.username = username.Text; 

     bool contactExists = _dataDC.users.Any(x => x.username.Equals(_user.username)); 
     if (contactExists) 
     { 
      MessageBox.Show("Gebruiker bestaat al"); 
     } 
     else 
     { 
      _dataDC.users.InsertOnSubmit(_user); 
      _dataDC.SubmitChanges(); 

      MessageBox.Show("Registratie succesvol"); 
      MainWindow _main = new MainWindow(); 
      _main.Show(); 
      this.Close(); 
     } 
    } 
} 

我使用SQL服務器管理器。我的表格中的主鍵是'ID'。自動增量已啓用。我沒有設置id在任何地方,所以它是技術性的空,但我得到這個錯誤。任何解決方案

編輯:modelclass:

public user user 
     { 
      get 
      { 
       return this._user.Entity; 
      } 
      set 
      { 
       user previousValue = this._user.Entity; 
       if (((previousValue != value) 
          || (this._user.HasLoadedOrAssignedValue == false))) 
       { 
        this.SendPropertyChanging(); 
        if ((previousValue != null)) 
        { 
         this._user.Entity = null; 
         previousValue.recipients.Remove(this); 
        } 
        this._user.Entity = value; 
        if ((value != null)) 
        { 
         value.recipients.Add(this); 
         this._recipient1 = value.username; 
        } 
        else 
        { 
         this._recipient1 = default(string); 
        } 
        this.SendPropertyChanged("user"); 
       } 
      } 
     } 

而且的PropertyChanged:

public partial class user : INotifyPropertyChanging, INotifyPropertyChanged 
    { 

     private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty); 

     private int _userid; 

     private string _username; 

     private System.Data.Linq.Binary _password; 

     private EntitySet<email> _emails; 

     private EntitySet<recipient> _recipients; 

    #region Extensibility Method Definitions 
    partial void OnLoaded(); 
    partial void OnValidate(System.Data.Linq.ChangeAction action); 
    partial void OnCreated(); 
    partial void OnuseridChanging(int value); 
    partial void OnuseridChanged(); 
    partial void OnusernameChanging(string value); 
    partial void OnusernameChanged(); 
    partial void OnpasswordChanging(System.Data.Linq.Binary value); 
    partial void OnpasswordChanged(); 
    #endregion 

     public user() 
     { 
      this._emails = new EntitySet<email>(new Action<email>(this.attach_emails), new Action<email>(this.detach_emails)); 
      this._recipients = new EntitySet<recipient>(new Action<recipient>(this.attach_recipients), new Action<recipient>(this.detach_recipients)); 
      OnCreated(); 
     } 

     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_userid", DbType="Int NOT NULL", IsPrimaryKey=true, IsDbGenerated=true)] 
     public int userid 
     { 
      get 
      { 
       return this._userid; 
      } 
      set 
      { 
       if ((this._userid != value)) 
       { 
        this.OnuseridChanging(value); 
        this.SendPropertyChanging(); 
        this._userid = value; 
        this.SendPropertyChanged("userid"); 
        this.OnuseridChanged(); 
       } 
      } 
     } 

     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_username", DbType="VarChar(50) NOT NULL", CanBeNull=false)] 
     public string username 
     { 
      get 
      { 
       return this._username; 
      } 
      set 
      { 
       if ((this._username != value)) 
       { 
        this.OnusernameChanging(value); 
        this.SendPropertyChanging(); 
        this._username = value; 
        this.SendPropertyChanged("username"); 
        this.OnusernameChanged(); 
       } 
      } 
     } 

     [global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_password", DbType="VarBinary(MAX) NOT NULL", CanBeNull=false, UpdateCheck=UpdateCheck.Never)] 
     public System.Data.Linq.Binary password 
     { 
      get 
      { 
       return this._password; 
      } 
      set 
      { 
       if ((this._password != value)) 
       { 
        this.OnpasswordChanging(value); 
        this.SendPropertyChanging(); 
        this._password = value; 
        this.SendPropertyChanged("password"); 
        this.OnpasswordChanged(); 
       } 
      } 
     } 
+0

? –

+0

您能否顯示'user'模型和您的'InsertOnSubmit'邏輯? –

+0

您可以顯示用戶的Model類嗎? –

回答

1

你需要你的id屬性標記爲被自動生成。根據您使用的技術,這可能會在設計器中修改它,爲屬性添加[Key]屬性,或使用流暢配置將其配置爲鍵。

在LINQ to SQL設計,你會自動生成的屬性設置爲true和自動同步設置爲OnInsert - 您使用什麼ORM auto generate in LINQ to SQL

+0

是的,我做到了。而且我也在我的數據庫中做過,或者我認爲我做過。除了我在錯誤的列上做了:')讓我再次檢查,現在已修復,謝謝。 – user3117628