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