我编写了一个简单的测试程序,它将使用 DevArt dotConnect for Oracle v. 6.8.0.350 以直接模式访问 Oracle Express 上的默认 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)。
如果我运行测试应用程序,则会创建记录并且它有一个有效的新LocationID
. 但在 EF 中,新 ID 不会到达。
为什么它不能识别生成的 ID?如果是,那是什么意思:DevArt 博客
编辑:我现在在不同的场景中对其进行了测试:
- 直接模式下的 devArt EntityModel
- 带有 OracleClient 的 devArt EntityModel
- ADO.NET EntityModel 与 OracleClient
结果是一样的。DSID
在 SaveChanged 上返回No。作为另一个结果,如果我写
ctx.Refresh(RefreshMode.ClientWins, log);
一个 InvalidOperationException 会引发说,现在有键为“0”的实体是正确的但没有帮助:-(。