错误:
类型' System.Data.SqlClient.SqlException'未处理的异常 发生在System.Data.Linq.dll中 附加信息:违反PRIMARY KEY约束' PK_users'。无法在对象' dbo.users'中插入重复的密钥。该 重复键值为(0)。 声明已经终止。
代码:
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 Server Manager。我表中的主键是“ID'”。启用自动增量。我没有在任何地方设置ID,所以它技术上是null,但我得到了这个错误。任何解决方案?
编辑: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 :(得分:1)
您需要将id属性标记为自动生成。根据您使用的技术,可以在设计器中对其进行修改,向属性添加[Key]
属性,或使用流畅配置将其配置为密钥。
在LINQ to SQL设计器中,您将AutoGenerated属性设置为true
并将自动同步设置为OnInsert
- auto generate in LINQ to SQL