1

Oracle 11g データベースを使用しています。主キーに適用されるデータベースとインデクサーで作成された多くのテーブル。その後、Entity Framework 5.0 を使用してデータベースに接続しました。問題は、テーブルにレコードを保存するときに、自動インクリメント値である主キーを送信しないことです。

public HttpResponseMessage PostCategory(TBLCATEGORY tblcategory)
    {
        if (ModelState.IsValid)
        {
            db.TBLCATEGORies.Add(tblcategory);
            db.SaveChanges();
            int32 ID=tblcategory.ID;
            return ID;
        }
    }

ID = 0 を返します。もう1つ、Oracleで整数列を作成しているときに、Entity Frameworkで10進数が表示されます。

4

2 に答える 2

1

ID列の自動インクリメントを行うOracleデータベースでシーケンスとトリガーを定義したと仮定しているため、EFモデルのオブジェクトのみが更新されませんが、データベースの実際のエントリには正しいインクリメントされたIDがあります値ですよね?

次に、問題は、列が実際にはデータベースで値が生成される ID 列であることを edmx モデルが認識していないことです。edmx モデルを手動で編集する必要があります。SSDL セクションのそれぞれの列エントリでは、StoreGeneratedPattern プロパティを "Identity" に設定する必要があります。これにより、生成された ID 値を検索するために、挿入後にデータベースを再度チェックするようにモデルに指示します。ただし、データベースからモデルを更新するたびに、手動で行った変更は失われます。

私はそれについて短いブログ投稿を書きました: http://blog.aitgmbh.de/2014/06/02/patch-for-entity-framework-models-based-on-oracle-databases/

また、プロジェクトをビルドするたびにすべてを実行する NuGet パッケージを作成しました: http://bit.ly/1hbxIsO

このようにして、edmx モデルを更新した後でも、Identity プロパティが指定された ID 列に再度追加されます。

于 2014-06-03T08:31:18.473 に答える