SQLite avec Entity Framework

entity-framework system.data.sqlite

Question

J'ai un problème avec les clés primaires dans Entity Framework lors de l'utilisation de SQLite. SQLite souhaite une valeur NULL explicite dans la liste VALUES sur une colonne de clé primaire auto-incrémentée. Je n'ai pas encore examiné le code SQL généré dans le contexte EF, mais je pense qu'il est conforme à la convention habituelle de SQL Server selon laquelle aucune valeur n'est fournie pour la colonne auto-incrémentée.

Selon le site du fournisseur ADO.NET SQLite, EF est entièrement pris en charge, mais je n’y trouve aucune aide. Existe-t-il un moyen de forcer EF à insérer explicitement une valeur NULL pour la valeur de la clé primaire?

Réponse acceptée

Eh bien, j'ai finalement fait ce travail: D. Vous devez définir la colonne id comme auto-incrémentation, pour que cela fonctionne avec EF. Ne me demandez pas pourquoi cela n'est pas mentionné dans la question sur l'incrémentation automatique dans les FAQ SQLite. Ceci est un exemple:

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

De plus, je n’ai pas trouvé le moyen de régler cela à partir de Visual Studio, mais à partir de l’outil en ligne de commande.

UPDATE: Le code suivant fonctionne bien.

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

Le PersonaID n'était pas défini et après l'opération de sauvegarde, il avait la valeur assignée par sqlite.


Réponse populaire

Hourra ... j'ai trouvé la solution!

  1. Déclarez la colonne ID sous la forme INTEGER PRIMARY KEY AUTOINCREMENT dans votre instruction create table. INTEGER PRIMARY KEY ne fonctionnera pas!
  2. Mettez à jour votre modèle Entity Framework dans Visual Studio, définissez la propriété de colonne ID StoreGeneratedPattern sur "Calculé".


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow