我在SQLite上创建了一个示例表,其Id列为自动增量。
CREATE TABLE "ESVLIntegration" ("Id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE , "ProcessId" TEXT NOT NULL , "UserId" INTEGER NOT NULL , "Status" TEXT NOT NULL , "StartDate" DATETIME NOT NULL , "EndDate" DATETIME, "Operation" TEXT NOT NULL , "SNEquip" TEXT NOT NULL , "CardName" TEXT NOT NULL , "FilePath" TEXT NOT NULL , "Processed" BOOL NOT NULL )但是,当我第二次尝试插入时,会出现以下错误:
由于约束冲突而中止,主键必须是唯一的。
这是我的密码
public class ESVLIntegration
{
public long Id { get; set; }
public String ProcessId { get; set; }
public long UserId { get; set; }
public String Status { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public String Operation { get; set; }
public String SNEquip { get; set; }
public String CardName { get; set; }
public String FilePath { get; set; }
public Boolean Processed { get; set; }
}
public class Sample : Database<Sample>
{
public Table<ESVLIntegration> ESVLIntegration { get; set; }
}
private void WriteParameters()
{
"Writing sample parameters to SQLite DB".LogDebug();
var pars = new ESVLIntegration();
pars.ProcessId = Guid.NewGuid().ToString();
pars.CardName = "gpp3";
pars.StartDate = DateTime.Now;
pars.Status = "Start";
pars.Operation = VerifyStatus;
pars.SNEquip = "12345";
pars.FilePath = @"C:\Folder\FilePath";
pars.Processed = false;
using (var conn = new SQLiteConnection(connStr))
{
conn.Open();
var db = Sample.Init(conn, 2);
db.ESVLIntegration.Insert(pars);
}
}对我做错了什么有什么想法吗?
编辑
SQlite上的整数列为int64(long)类型
发布于 2012-08-02 04:42:08
从SQLite常见问题中我发现:
在这个表中,语句 插入t1值(NULL,123); 在逻辑上相当于说: 插入t1值((从t1中选择最大值(A))+1,123);
所以我把我的类Id更改为可空
public class ESVLIntegration
{
public long? Id { get; set; }
public String ProcessId { get; set; }
public long UserId { get; set; }
public String Status { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public String Operation { get; set; }
public String SNEquip { get; set; }
public String CardName { get; set; }
public String FilePath { get; set; }
public Boolean Processed { get; set; }
}现在它工作得很好!
https://stackoverflow.com/questions/11771166
复制相似问题