其他分享
首页 > 其他分享> > CodeGo.net> StoreGeneratedPattern不能与DevArt实体框架一起使用?

CodeGo.net> StoreGeneratedPattern不能与DevArt实体框架一起使用?

作者:互联网

我编写了一个简单的测试程序,该程序将使用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).

如果运行test-app,则会创建记录,并且该记录具有有效的新LocationID.但是在EF中,新ID将不会到达.

为什么无法识别生成的ID?如果是,那意味着什么:DevArt Blog

编辑:我现在在不同的情况下测试它:

>直接模式下的devArt EntityModel
>使用OracleClient的devArt EntityModel
>带有OracleClient的ADO.NET EntityModel

结果是一样的. SaveChanged上不返回任何DSID.另一个结果是,如果我写

ctx.Refresh(RefreshMode.ClientWins, log);

一个InvalidOperationException将会引起这样的说法,即现在有一个键为’0’的实体是正确的,但没有帮助:-(.

解决方法:

如果查看.edmx文件,则会看到定义了概念性架构和存储架构.如果您在设计器中更改StoreGeneratedPattern,它将仅在概念模式中进行更改,而不会在存储模式中进行更改,这确实是必需的.

StoreGeneratedPattern位于设计器中,用于模型优先开发,如果您从模型生成数据库,则该数据库无效.因此,您必须在存储模式中手动插入属性.

标签:oracle,devart,c,entity-framework,dotconnect
来源: https://codeday.me/bug/20191127/2076770.html