加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用AutoIncrement插入

发布时间:2020-12-15 20:59:51 所属栏目:百科 来源:网络整理
导读:我正在尝试将一些数据插入到我的SQLite数据库中,当我使用一条记录执行此操作时,该数据库非常有效.但在循环中我得到一个错误.首先,这是代码 string dataSource = "Data Source=";Connection = new SQLiteConnection(dataSource + this.DatabasePath);var cont
我正在尝试将一些数据插入到我的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
)

最后我得到错误:

An exception of type ‘System.Data.Linq.DuplicateKeyException’ occurred in System.Data.Linq.dll but was not handled in user code

Additional information: Eine Entit?t,deren Schlüssel bereits verwendet wird,kann nicht hinzugefügt werden.

我敢打赌,这是因为Field ID,它被设置为AutoIncrement.

解决方法

你只需删除ID = null,因为这是自动增量而不需要写这个.
更改表“User”删除NOT NULL检查自动增加列ID,并在类“User”中删除. ID列是自动递增,然后不需要使用NOT NULL约束进行检查.

for (int i = 0; i < 2; i++) {
    User tempUser = new User() {
        EMail = i + "@" + i + ".de",JoinedDate = DateTime.Now.ToString("yyyy.MM.dd HH:mm:ss")
    };

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读