2017-09-06 8 views
1

Ich verwende die Official Oracle SQL und Entity Framework Treiber, um die Datenbank zu lesen. Aber beim Lesen der Datenbank wird der Tabellenname mit "dbo" vorangestellt:Vermeiden Sie Oracle Schemaname mit Entity Framework

SELECT 
* 
FROM "dbo"."Woningen" 

Ohne "dbo". Präfix der Code funktioniert gut, mit, verursacht es den Fehler "Tabelle oder Ansicht existiert nicht". Dies liegt wahrscheinlich daran, dass der Benutzer nicht 'dbo' ist, also keinen Zugriff auf dieses Schema hat. Dies ist der Entity Framework-Code, ich verwende:

[Table("Woningen")] 
public class Woningen 

Ich habe versucht, die Oracle nuget Paket aktualisieren, aber dann kommt es mit dem Fehler auf „Connection String ist nicht wohlgeformt“. Es hat wahrscheinlich den gleichen Fehler wie zuvor, es ist nur früher gescheitert. Dies ist das Connectionstring-Format I verwendet:

<add name="DefaultConnection" 
    providerName="Oracle.ManagedDataAccess.Client" 
    connectionString="USER ID=testUser;PASSWORD=password; 
    Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=serverUrl)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=Database)));"/> 

ich drei mögliche Lösungen für dieses Problem sehen, habe aber keine Ahnung, wie sie umgesetzt werden:

  1. Manipulieren Entity Framework Schemanamen von Abfragen ausschließen
  2. Gib meinen Benutzerzugriff auf das Schema
  3. die Treiber-Update und das Connectionstring-Format beheben, wenn jemand weiß, wie das Format geändert ..

Beachten Sie, dass der aktuelle Code bereits in der Produktion funktioniert, so dass die aktuelle Version in Ordnung sein sollte. Die Datenbank und ihr Benutzer sind neu, daher könnte das Problem mit ihrer Erstellung zusammenhängen.

+0

Sie können das entsprechende Schema angeben, um in EF zu verwenden, wenn das hilft? EF6 + 'modelBuilder.HasDefaultSchema (" Ihr Schemaname ");' –

+0

@DanielShillcock Danke, das ist die Lösung, die den Benutzernamen als Schemanamen verwendet. Wenn Sie es zu einer Antwort machen, werde ich es akzeptieren. – MrFox

Antwort

1

Sie können das von Entity Framework verwendete Schema angeben. Siehe unten

Wenn Sie Entity Framework verwenden 6+ Sie folgende

public class Context : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     //Set a default schema for ALL tables 
     modelBuilder.HasDefaultSchema("YourSchemaName"); 
    } 
} 

verwenden können, wenn Sie ein Schema auf einer bestimmten Tabelle setzen wollen ...

[Table("Woningen"), Schema = "YourSchemaName")] 
public class Woningen { } 

Wenn Sie Verwenden von EF5

public class Context : DbContext 
{  
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     // Unfortunately you have to specify each table you want to set a schema for... 
     modelBuilder.Entity<Woningen>().ToTable("Woningen", "YourSchemaName"); 
    } 
} 
+0

irgendeine Empfehlung für die erste Annäherung der Datenbank? denn in fast allen Fällen ist das Schema von dev env anders als prod env. –

+0

@SyedAliTaqi Vielleicht Schemaname in den Webconfig/Anwendungseinstellungen speichern? –

+0

danke für schnelle antwort! Ich habe es versucht, konnte aber nicht alle Teile gut verbinden. wäre wirklich hilfreich, wenn Sie einen Blog oder einen Link mit Code teilen können, als Leitfaden? –

Verwandte Themen