我正在尝试将一些数据插入到我的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.DuplicateKeyException”类型的异常,但未在用户代码中处理
附加信息:无法添加已使用其键的实体。
我敢打赌,这是因为字段 ID
被设置为 AutoIncrement
导致的。
public int ID { get; set; }
(不可为空),并将属性标记为DatabaseGenerated
=Identity
。 - Gert Arnold