SQLite con Entity Framework

entity-framework system.data.sqlite

Domanda

Sto avendo un problema con le chiavi primarie in Entity Framework quando si usa SQLite. SQLite vuole un NULL esplicito nell'elenco VALUES su una colonna chiave primaria autoincrementante. Non ho effettivamente guardato l'SQL generato nel contesto EF, ma credo che stia andando con la solita convenzione di SQL Server di non fornire alcun valore per la colonna autoincrementing.

Secondo il sito per il provider SQLite di ADO.NET, EF è completamente supportato ma non trovo alcun aiuto in questo caso. C'è un modo per forzare EF a inserire esplicitamente un valore NULL per il valore della chiave primaria?

Risposta accettata

Bene, finalmente ho fatto questo lavoro: D. È necessario impostare la colonna id come autoincrement, in questo modo funziona con EF. Non chiedermi perché questo non è menzionato nella domanda sull'auto-incremento in sqlite faq. Questo è un esempio:

create table Persona ( PersonaID integer primary key autoincrement, Nombre text)

Inoltre, non ho trovato un modo per impostare questo da Visual Studio, ho dovuto farlo dallo strumento della riga di comando.

AGGIORNAMENTO: il seguente codice funziona correttamente.

PruebaDBEntities data = new PruebaDBEntities();

        foreach (int num in Enumerable.Range(1, 1000))
        {
            Persona p = new Persona() { Nombre = "Persona " + num, Edad = num };

            data.AddToPersona(p);

            data.SaveChanges();

            Console.WriteLine(p.PersonaID);
        }

Il PersonaID non è stato impostato, e dopo l'operazione di salvataggio ha avuto il valore assegnato da sqlite.


Risposta popolare

Evviva ... Ho trovato la soluzione!

  1. Dichiarare la colonna ID come INTEGER PRIMARY KEY AUTOINCREMENT nell'istruzione della tabella create. INTEGER PRIMARY KEY non funzionerà!
  2. Aggiorna il tuo modello di Entity Framework in Visual Studio, imposta la proprietà della colonna ID StoreGeneratedPattern su "Computed"


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché