They promise to fix "dbo" issue. But the quotes issue seems to be at Devart's side - because the provider handles CommandGeneration. Unfortunately libraries are obfuscated, so it was hard to find the specific place where attribute names are generated.
The call sequence is like that:
System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand
-> UpdateTranslator.CreateCommand
-> DbProviderServices.CreateCommand
-> CreateCommandDefinition
-> CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree); // here we go into Devart.Data.Oracle.Entity.OracleEntityProviderServices.
-> DbCommand prototype = this.a(providerManifest, commandTree);
-> return new e().a(A_1, null, A_0);
-> else if (A_0 is DbInsertCommandTree)
b.a(tree2, command, A_2);
->A_0.Target.Expression.Accept(visitor); //here we add a table name
this results into call to
Devart.Data.Oracle.Entity.b.a.a(DbScanExpression A_0)
{
base.a.Append(e.a().a(A_0.Target));
}
-> Devart.Common.Entity.j.a(EntitySetBase A_0)
here the Schema name is retrieved
if (A_0.MetadataProperties.TryGetValue("Schema", false, out property) && (property.Value != null))
{
str2 = property.Value as string;
}
if (!string.IsNullOrEmpty(str2))
{
builder.Append(this.b(str2));
builder.Append(".");
}
and here is the root of evil:
builder.Append(this.b(str2));
call to abstract method. Implementation is at
Devart.Data.Oracle.Entity.e.b(string A_0)
{
return b.d(A_0);
}
that is
public static string d(string A_0)
{
if (f(A_0))
{
return ("\"" + A_0 + "\"");
}
return A_0;
}
so Schema name is enclosed in quotes be Devart dotConnect!!
returning to the method where we started with Schema name retireval. Later we append table name:
if (A_0.MetadataProperties.TryGetValue("Table", false, out property) && (property.Value != null))
{
str3 = property.Value as string;
}
if (!string.IsNullOrEmpty(str3))
{
builder.Append(this.b(str3));
}
so it is processed through the same code and enclosed in quotes.
The same applies to all propertyNames as in
public override void a(DbPropertyExpression A_0)
{
base.a.Append(b.d(A_0.Property.Name));
}
there is a direct call to
Devart.Data.Oracle.b.d(string A_0) method that encloses everything in quotes.
So, enclosing identifiers in quotes is done definitely on Devarts side and is a serious bug preventing from using Devart dotConnect with Oracle.
Sad.