Ho creato una tabella di esempio su SQLite che ha una colonna Id che è l'incremento automatico.Come si ottiene Dapper.Rainbow da inserire in una tabella con AutoIncrement su SQLite?
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)
Ma quando provo ad inserire per la seconda volta, ottengo il seguente errore:
Abort due to constraint violation PRIMARY KEY must be unique
Questo è il mio codice
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);
}
}
tutte le idee su quello che sto facendo sbagliato qui?
EDIT
colonne INTEGER su SQLite sono di int64 di tipo (lunghe)
hai bisogno di hackerare la fonte dell'arcobaleno per farlo funzionare –
Ho capito che funziona bene come da mia risposta. L'impostazione del campo chiave come nullable ha fatto il trucco. –