Мы используем Devart dotConnect для оракула с Entitiy Framework.
Мы использовали решение, описанное здесь для генерации идентификаторов с последовательностями, и все работало хорошо, пока мы не обновились до devart 9.7.
Похоже, что DefaultValue игнорируется. Например, если я смотрю в DBMonitor, я вижу команду вставки без seq_name.nextval.
Странно то, что когда я запускаю тот же код в консольном приложении, он работает, а в IIS нет (даже на той же машине)
Изменить: пример:
Есть таблица 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>
В моем коде С# это выглядит так:
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) это работало хорошо.
Что может быть причиной?