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ブログ
編集:私は今、さまざまなシナリオでそれをテストしました:
- ダイレクトモードのdevArtEntityModel
- OracleClientを使用したdevArtEntityModel
- OracleClientを使用したADO.NETEntityModel
結果は同じです。DSID
SaveChangedではNoが返されます。別の結果として、私が書くと
ctx.Refresh(RefreshMode.ClientWins, log);
InvalidOperationExceptionは、正しいが役に立たないキー「0」のエンティティが存在することを通知します:-(。