Entity FrameworkのSQLite

entity-framework system.data.sqlite

質問

SQLiteを使用しているときにEntity Frameworkの主キーに問題があります。 SQLiteは自動インクリメントの主キーカラムのVALUESリストに明示的なNULLを望んでいます。 EFコンテキストで生成されたSQLを実際に見たことはありませんが、自動インクリメント列に値を指定しないという通常のSQL Serverの規則に従っていると思います。

ADO.NET SQLiteプロバイダーのサイトによると、EFは完全にサポートされていますが、そこでは何も助けになりません。 EFに主キー値にNULLを明示的に挿入させる方法はありますか?

受け入れられた回答

さて、私はついにこの仕事をしました。 id列をオートインクリメントとして設定する必要があります。これはEFで機能します。なぜこれがsqlite faqの自動インクリメントについての質問で言及されていないのか私に聞かないでください。これは一例です。

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

また、私はビジュアルスタジオ内からこれを設定する方法を見つけませんでした、私はコマンドラインツールからそれをしなければなりませんでした。

更新:次のコードは正常に動作します。

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

PersonaIDが設定されておらず、保存操作の後でsqliteによって割り当てられた値を持っていました。


人気のある回答

万歳...解決策を見つけました!

  1. create table文でIDカラムをINTEGER PRIMARY KEY AUTOINCREMENTとして宣言します。 INTEGER PRIMARY KEYは機能しません。
  2. Visual StudioでEntity Frameworkモデルを更新し、ID列プロパティStoreGeneratedPatternを "Computed"に設定します。


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ