Page 1 of 1

Orcle Provider doesn't handle "keyword" field names

Posted: Mon 26 Nov 2012 20:47
by John Liu
When Orcle reserved keywords are used in field names, Devart oracle provider generates the following errors. Keywords include: Comment, Sequence, Style, Float, Required...
PM> Update-database -verbose
CREATE TABLE AZTECA.PANELITEM (
ITEMID NUMBER(18,2) NOT NULL,
PANELID NUMBER(18,2) NOT NULL,
ITEMNAME NVARCHAR2(512) NOT NULL,
ITEMTYPE NUMBER(18,2) NOT NULL,
CONTROLID NVARCHAR2(512) NULL,
ROW NUMBER(18,2) NOT NULL,
SEQUENCE NUMBER(18,2) NOT NULL,
TEXT NVARCHAR2(256) NULL,
HEIGHT NVARCHAR2(100) NULL,
WIDTH NVARCHAR2(100) NULL,
FORECOLOR NVARCHAR2(100) NULL,
BACKCOLOR NVARCHAR2(100) NULL,
ALIGNMENT NVARCHAR2(100) NULL,
STYLE NVARCHAR2(512) NULL,
REQUIRED NUMBER(18,2) NULL,
VISIBLE NUMBER(18,2) NULL,
SKINID NVARCHAR2(100) NULL,
CSSCLASS NVARCHAR2(512) NULL,
ROWCSSCLASS NVARCHAR2(256) NULL,
ROWSTYLE NVARCHAR2(256) NULL,
PRIMARY KEY (ITEMID)
)
Devart.Data.Oracle.OracleException (0x80004005): ORA-00904: : invalid identifier
at Devart.Data.Oracle.t.d()
at Devart.Data.Oracle.ar.h()
at Devart.Data.Oracle.ar.c()
at Devart.Data.Oracle.aa.a(Int32 A_0, bw A_1)
at Devart.Data.Oracle.OracleCommand.InternalExecute(CommandBehavior behavior, IDisposable disposable, Int32 startRecord, Int32 maxRecords, Boolean nonQuery)
at Devart.Common.DbCommandBase.ExecuteDbDataReader(CommandBehavior behavior, Boolean nonQuery)
at Devart.Data.Oracle.OracleCommand.ExecuteNonQuery()
at System.Data.Entity.Migrations.DbMigrator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ExecuteSql(DbTransaction transaction, MigrationStatement migrationStatement)
at System.Data.Entity.Migrations.DbMigrator.ExecuteStatements(IEnumerable`1 migrationStatements)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.ExecuteStatements(IEnumerable`1 migrationStatements)
at System.Data.Entity.Migrations.DbMigrator.ExecuteOperations(String migrationId, XDocument targetModel, IEnumerable`1 operations, Boolean downgrading, Boolean auto)
at System.Data.Entity.Migrations.DbMigrator.ApplyMigration(DbMigration migration, DbMigration lastMigration)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.ApplyMigration(DbMigration migration, DbMigration lastMigration)
at System.Data.Entity.Migrations.DbMigrator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.Infrastructure.MigratorLoggingDecorator.Upgrade(IEnumerable`1 pendingMigrations, String targetMigrationId, String lastMigrationId)
at System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration)
at System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update(String targetMigration)
at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore()
at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
ORA-00904: : invalid identifier

Re: Orcle Provider doesn't handle "keyword" field names

Posted: Wed 28 Nov 2012 15:25
by Shalex
Please make sure that the DisableQuoting option is NOT set to true in your code like:

Code: Select all

OracleEntityProviderConfig config = OracleEntityProviderConfig.Instance;  
config.Workarounds.DisableQuoting = true;

Re: Orcle Provider doesn't handle "keyword" field names

Posted: Wed 28 Nov 2012 18:33
by John Liu
That seems fixed my problem. But remember to use Uppercase table names (not sure Uppercase column names are required). Otherwise sql statements have to be like the following.
Select * from "AZ"."CwVersion" -- works great
Select * from AZ.CwVersion -- table not found
It's OK for the migration history table to be named with upper and lower cases
Select * from "AZ"."__MigrationHistory"


Thanks very much!
John