为什么devart DefaultValue属性在9.7版上不起作用

问题描述 投票:0回答:1

我们正在使用带有Entitiy Framework的用于Oracle的Devart dotConnect。

我们一直使用描述为here的解决方案来生成具有序列的ID,并且都运行良好,直到我们升级到devart 9.7为止

看起来好像DefaultValue被忽略了。例如,如果我查看DBMonitor,则会看到不带seq_name.nextval的插入命令。

奇怪的是,当我在控制台应用程序中运行相同的代码时,它可以工作,但在IIS上不行(即使在同一台机器上)

编辑:例如:

在Oracle数据库中有一个表MY_TABLE和一个序列MY_SEQUENCE。

[我使用Devart Entity Developer生成了一个edml模型,其中包含该表的一个实体,称为TABLE。

[在XML编辑器中,我添加了DefaultValue和StoreGeneratedPattern属性。它看起来像这样:

<EntityType Name="MY_TABLE">
      <Key>
        <PropertyRef Name="ID" />
      </Key>
      <Property Name="ID" Type="decimal" Nullable="false"                     
                devart:DefaultValue="MY_SEQUENCE.nextval"
                StoreGeneratedPattern="Identity" />
      <Property Name="COL1" Type="VARCHAR2" MaxLength="200" />
      <Property Name="COL2" Type="decimal" Nullable="false" />
    </EntityType>

在我的C#代码中,它看起来像这样:

ctx.TABLEs.AddObject(new TABLE(){COL1 = "a", COL2 = 3});
ctx.SaveChanges();

当我在控制台应用程序中执行代码时,生成的命令是:

DECLARE
  updatedRowid ROWID;
BEGIN
INSERT INTO MY_TABLE(ID, COL1, COL2)
VALUES (MY_SEQUENCES.nextval, :p0, :p1)
RETURNING ROWID INTO updatedRowid;
OPEN :outParameter FOR SELECT ID FROM MY_TABLE WHERE ROWID = updatedRowid;
END;

但是,IIS(在同一台计算机上)的相同代码生成此命令:

DECLARE
  updatedRowid ROWID;
BEGIN
INSERT INTO MY_TABLE(COL1, COL2)
VALUES (:p0, :p1)
RETURNING ROWID INTO updatedRowid;
OPEN :outParameter FOR SELECT ID FROM MY_TABLE WHERE ROWID = updatedRowid;
END;

在旧的Devart版本(9.7之前的版本中,效果很好。

可能是什么原因?

c# .net oracle devart
1个回答
0
投票

[移至Entity Framework版本5,并用Devart.Data.Oracle.Entity.EF5替换dll-Devart.Data.Oracle.Entity.EF4之后,它又开始工作。

© www.soinside.com 2019 - 2024. All rights reserved.