SQLite mit Entity Framework

entity-framework system.data.sqlite

Frage

Ich habe ein Problem mit Primärschlüsseln in Entity Framework, wenn Sie SQLite verwenden. SQLite will eine explizite NULL in der VALUES-Liste für eine Primärschlüsselspalte mit automatischem Inkrementieren. Ich habe mir die generierte SQL im EF-Kontext nicht wirklich angesehen, aber ich glaube, es entspricht der üblichen SQL Server-Konvention, keinen Wert für die Autoincrementing-Spalte bereitzustellen.

Laut der Site für den ADO.NET SQLite-Anbieter wird EF vollständig unterstützt, aber ich finde dort keine Hilfe. Gibt es eine Möglichkeit, EF zu zwingen, explizit einen NULL-Wert für den Primärschlüsselwert einzufügen?

Akzeptierte Antwort

Nun, ich habe endlich diese Arbeit gemacht: D. Sie müssen die ID-Spalte als Autoincrement festlegen. Auf diese Weise funktioniert sie mit EF. Fragen Sie mich nicht, warum dies in der Frage zum automatischen Inkrementieren in sqlite faq nicht erwähnt wird. Dies ist ein Beispiel:

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

Ich habe auch keine Möglichkeit gefunden, dies innerhalb von Visual Studio festzulegen, ich musste es vom Befehlszeilen-Tool aus tun.

UPDATE: Der folgende Code funktioniert gut.

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);
        }

Die PersonaID wurde nicht festgelegt und nach dem Sicherungsvorgang hatte der Wert von sqlite einen Wert.


Beliebte Antwort

Hurra ... Ich habe die Lösung gefunden!

  1. Deklarieren Sie die ID-Spalte in Ihrer create table-Anweisung als INTEGER PRIMARY KEY AUTOINCREMENT. INTEGER PRIMARY KEY funktioniert nicht!
  2. Aktualisieren Sie Ihr Entity Framework-Modell in Visual Studio. Legen Sie die ID-Spalteneigenschaft StoreGeneratedPattern auf "Berechnet" fest.


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum