我正在尝试在WinForms中使用SQLite。因此,我创建了一个名为Artist的表,它具有2个名为ArtistIdName的列。 ArtistId的属性为:INTEGER PRIMARY AUTOINCREMENT

在foreach循环中,如果我手动给出值,则没有问题。

    LtoSQLiteDataContext oc = new LtoSQLiteDataContext();
    int i = 1;
    foreach (var pdfs in articles)
    {
       var r = new PdfReader(pdfs);
       var title = r.Info["Title"].Trim();
       var m = new Artist
       {
                ArtistId = i,
                Name = title
        };
            oc.Artists.InsertOnSubmit(m);
            oc.SubmitChanges();
     i++;
     }


但是,如果我忽略//ArtistId = i;之类的ArtistId,则在第一条记录中,ArtistId获取0,并且进程终止。这是屏幕截图:
c# - SQLite自动增量从0开始,然后终止进程-LMLPHP

我知道在MySQL和MsSQL中,永远不会写入自动递增字段的值。因为它按顺序获取数字。
我不知道自动增量功能如何正常工作。

最佳答案

确保为ArtistId属性生成的代码如下所示(打开* .Designer.cs文件):

[Column(Name = @"ArtistId ", Storage = "_ArtistId", CanBeNull = false, DbType = "INTEGER NOT NULL", IsDbGenerated = true, IsPrimaryKey = true)]
   public long ArtistId
   {...}


如果没有,请打开您的LinqConnect模型并更改ArtistId属性(通过双击打开ArtistId属性的Properties):


设置实体密钥= True
将自动生成的值设置为True
保存模型。


如果这样做没有帮助,请contact us处理测试项目(包括LinqConnect模型和测试数据库文件),以便我们能够更清楚地调查您的方案并在最短的时间内为您找到解决方案。

关于c# - SQLite自动增量从0开始,然后终止进程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34576033/

10-12 00:25