3

DevArt dotConnect for Oracle v。6.8.0.350を使用して、直接モードでOracleExpressのデフォルトのHRモデルにアクセスする簡単なテストプログラムを作成しました。

using (var ctx = new HREntities())
{
    var locNew = new LOCATION();
    locNew.CITY = "Magdeburg";
    ctx.LOCATIONs.AddObject(locNew);
    ctx.SaveChanges();
    // will output 0; in database ID is generated
    Console.WriteLine(locNew.LOCATIONID);
}

ご覧のとおり、私はLOCATIONテーブルに挿入しています。ここでトリガーを追加しました:

create or replace
trigger TRG_LOCATION_INS  
   before insert on "HR"."LOCATIONS" 
   for each row 
begin  
   if inserting then 
      select LOCATIONS_SEQ.nextval into :NEW."LOCATION_ID" from dual;       
   end if; 
end;

最後のステップはStoreGeneratedPattern、モデルをに設定することでしたIdentity(はい、XMLに書き込まれているかどうかを確認しました)。

test-appを実行すると、レコードが作成され、有効な新しいが取得されますLocationID。ただし、EFでは新しいIDは到着しません。

生成されたIDを認識しないのはなぜですか?はいの場合、それはどういう意味ですか:DevArtブログ

編集:私は今、さまざまなシナリオでそれをテストしました:

  1. ダイレクトモードのdevArtEntityModel
  2. OracleClientを使用したdevArtEntityModel
  3. OracleClientを使用したADO.NETEntityModel

結果は同じです。DSIDSaveChangedではNoが返されます。別の結果として、私が書くと

ctx.Refresh(RefreshMode.ClientWins, log);

InvalidOperationExceptionは、正しいが役に立たないキー「0」のエンティティが存在することを通知します:-(。

4

2 に答える 2

3

.edmx ファイルを見ると、概念スキーマとストレージ スキーマが定義されていることがわかります。デザイナーで StoreGeneratedPattern を変更すると、概念スキーマのみが変更され、ストレージ スキーマは変更されません。これは本当に必要です。

モデルからデータベースを生成する場合、StoreGeneratedPattern はモデル優先開発用のデザイナーにあり、それ以外の場合は効果がありません。そのため、ストレージ スキーマに属性を手動で挿入する必要があります。

于 2012-08-19T08:47:19.057 に答える
0

いくつかのテストの後、edml の XML をもう一度見てみると、StoreGeneratedPattern が XML に到達していないことがわかりました。私が書いた最初の投稿で XML をチェックしたため、何が起こったのかわかりません。初めてこれを行ったとき、属性がそこにありました。ただし、ソリューションに興味がある方は、こちらをご覧ください: Solution in other thread

于 2012-08-19T08:46:29.900 に答える