【发布时间】:2016-05-11 10:04:53
【问题描述】:
我正在尝试将一些数据插入到我的 SQLite 数据库中,当我对一条记录执行此操作时,它可以完美运行。但是在循环中我得到一个错误。首先,这里是代码
string dataSource = "Data Source=";
Connection = new SQLiteConnection(dataSource + this.DatabasePath);
var context = new DataContext(Connection);
var users = context.GetTable<User>();
for (int i = 0; i < 2; i++) {
User tempUser = new User() {
ID = null,
EMail = i + "@" + i + ".de",
Password = "Test1234",
JoinedDate = DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss")
};
users.InsertOnSubmit(tempUser);
context.SubmitChanges();
}
还有用户本身
[Table(Name = "User")]
public class User {
[Column(Name = "UserID", IsPrimaryKey = true, CanBeNull = false)]
public int? ID { get; set; }
[Column(Name = "EMail", CanBeNull = false)]
public string EMail { get; set; }
[Column(Name = "Password", CanBeNull = false)]
public string Password { get; set; }
[Column(Name = "JoinedDate", CanBeNull = false)]
public String JoinedDate { get; set; }
[Column(Name = "PaymentMethodID")]
public int PaymentMethodID { get; set; }
}
表格是这样创建的
CREATE TABLE "User" (
`UserID` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
`EMail` TEXT NOT NULL,
`Password` TEXT NOT NULL,
`JoinedDate` TEXT NOT NULL,
`Licenses` INTEGER,
`PaymentMethodID` INTEGER
)
最后我得到的错误:
System.Data.Linq.dll 中出现“System.Data.Linq.DuplicateKeyException”类型的异常,但未在用户代码中处理
其他信息:Eine Entität、deren Schlüssel bereits verwendet wird、kann nicht hinzugefügt werden。
我敢打赌,这是因为 ID 字段设置为 AutoIncrement。
【问题讨论】:
-
你应该有
public int ID { get; set; }(不可为空)并将属性标记为DatabaseGenerated=Identity。