我编写了一个简单的测试程序,它将使用 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 Blog
编辑:我现在在不同的场景中测试了它:
- 直接模式下的 devArt EntityModel
- devArt EntityModel 与 OracleClient
- 带有 OracleClient 的 ADO.NET EntityModel
结果是一样的。 SaveChanged 没有返回 DSID
。作为另一个结果,如果我写
ctx.Refresh(RefreshMode.ClientWins, log);
InvalidOperationException 将引发说,现在存在键为“0”的实体,这是正确的但没有帮助:-(。
最佳答案
如果您查看 .edmx 文件,您会看到定义了一个概念架构和一个存储架构。如果您在设计器中更改 StoreGeneratedPattern,它只会在概念架构中更改它,而不会在存储架构中更改它,这是非常必要的。
StoreGeneratedPattern在模型优先开发的设计器中,如果你从模型生成数据库,否则它不起作用。因此,您必须手动将属性插入存储模式。
关于c# - StoreGeneratedPattern 不适用于 DevArt Entity Framework ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12008874/