为什么 devart DefaultValue 属性在版本 9.7 上不起作用
why is devart DefaultValue attribute not working on version 9.7
我们使用 Devart dotConnect for oracle 和 Entitiy Framework。
我们一直在使用 here 描述的解决方案来生成带有序列的 ID,并且一切正常,直到我们升级到 devart 9.7
似乎默认值被忽略了。
例如,如果我查看 DBMonitor,我会看到没有 seq_name.nextval.
的插入命令
奇怪的是,当我 运行 在控制台应用程序中使用相同的代码时它可以工作,但在 IIS 上却不行(即使在同一台机器上)
编辑:
示例:
oracle 数据库中有一个 table MY_TABLE 和一个序列 MY_SEQUENCE。
我使用 Devart Entity Developer 生成了一个包含一个实体的 edml 模型 table,它被称为 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 之前)中它运行良好。
可能是什么原因?
移动到 Entity Framework 版本 5 并将 dll - Devart.Data.Oracle.Entity.EF4 替换为 Devart.Data.Oracle.Entity.EF5 后,它又开始工作了。
我们使用 Devart dotConnect for oracle 和 Entitiy Framework。
我们一直在使用 here 描述的解决方案来生成带有序列的 ID,并且一切正常,直到我们升级到 devart 9.7
似乎默认值被忽略了。 例如,如果我查看 DBMonitor,我会看到没有 seq_name.nextval.
的插入命令奇怪的是,当我 运行 在控制台应用程序中使用相同的代码时它可以工作,但在 IIS 上却不行(即使在同一台机器上)
编辑: 示例:
oracle 数据库中有一个 table MY_TABLE 和一个序列 MY_SEQUENCE。
我使用 Devart Entity Developer 生成了一个包含一个实体的 edml 模型 table,它被称为 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 之前)中它运行良好。
可能是什么原因?
移动到 Entity Framework 版本 5 并将 dll - Devart.Data.Oracle.Entity.EF4 替换为 Devart.Data.Oracle.Entity.EF5 后,它又开始工作了。