c# - StoreGeneratedPattern 不适用于 DevArt Entity Framework ?

标签 c# oracle entity-framework devart dotconnect

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

编辑:我现在在不同的场景中测试了它:

  1. 直接模式下的 devArt EntityModel
  2. devArt EntityModel 与 OracleClient
  3. 带有 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/

相关文章:

sql - 创建分层定义的数据集的扁平表/ View

sql - 使用数据库中的新记录详细信息查找最旧的记录

c# - 在没有匿名类型的情况下获取父对象及其子对象计数

c# - 使用 Microsoft Web Optimization 缩小 CSS 和 JavaScript

c# - CheckboxList 忽略 DataValueField 和 DataTextField

c# - 将对象锁定在属性中,c#

c# - Entity Framework 6 : Use EntityDataSource for Binding?

c# - 为列表 c# 中的特定索引应用 lambda 表达式

java - 如何使用jsp根据另一个下拉列表在下拉列表中显示值?

c# - 我可以在没有上下文的情况下使用实体吗?