2017-02-02 2 views
0

Ich versuche, eine Token-basierte Autorisierung in meinem Web-API-Dienst zu machen, in der Planung, Identitätstabellen in meiner Oracle-Datenbank zu speichern.Oracle-Datenbankverbindung für Entity Framework

Ich weiß, dass es zwei Möglichkeiten gibt, auf die Datenbank zuzugreifen - über Oracle ManagedDataAccess oder Oracle DataAccess. Ich habe für Entity Framework verwaltete Version heruntergeladen 6.

Hier ist der Teil meiner web config ist:

(i Anmeldeinformationen und String-Pfad geändert haben, nur davon ausgehen, dass sie korrekt sind und ich kann ohne Entity verbinden Rahmen - aber nur mit nicht verwalteten Data Access)

<oracle.manageddataaccess.client> 
    <version number="*"> 
     <dataSources> 
      <dataSource alias="Test" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))" /> 
     </dataSources> 
    </version> 
</oracle.manageddataaccess.client> 
<connectionStrings> 
    <add name="Test" 
     providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=login;Password=pass;Data Source=Test" /> 
    <clear /> 
    <add name="OraAspNetConString" connectionString=" " /> 
</connectionStrings> 
<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
      <parameter value="v13.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="Oracle.ManagedDataAccess.Client" 
        type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /> 
    </providers> 
</entityFramework> 

und das ist der Teil dbContext - OnModelCreating Methode sollte Identität zwingen, meine selfprepared Tabellen zu verwenden (oder ich hoffe, es würde, haben keine Chance, sie zu testen) :

public class AuthContext : IdentityDbContext<IdentityUser> 
{ 
    public AuthContext() : base("Test") 
    { 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); // MUST go first. 

     modelBuilder.HasDefaultSchema("MY_SCHEME"); // Use uppercase! 

     modelBuilder.Entity<IdentityUser>().ToTable("AspNetUsers"); 
     modelBuilder.Entity<IdentityRole>().ToTable("AspNetRoles"); 
     modelBuilder.Entity<IdentityUserRole>().ToTable("AspNetUserRoles"); 
     modelBuilder.Entity<IdentityUserClaim>().ToTable("AspNetUserClaims"); 
     modelBuilder.Entity<IdentityUserLogin>().ToTable("AspNetUserLogins"); 
    } 

    public static AuthContext Create() 
    { 
     return new AuthContext(); 
    } 
} 

Also ... wenn ich Verbindungszeichenfolge bin mit mit ManagedDataAccess:

<add name="Test" 
    providerName="Oracle.ManagedDataAccess.Client" 
    connectionString="User Id=login;Password=pass;Data Source=Test" /> 

Ich erhalte die Fehlermeldung:

ORA-12154: TNS: konnte nicht auflösen die Verbindungskennung

Wenn ich mich an die unmanaged Version wende:

<add name="Test" 
    providerName="Oracle.DataAccess.Client" 
    connectionString="User Id=login;Password=pass;Data Source=Test" /> 

Ich erhalte einen Fehler, der Entity Framework nicht dbContextOracle.DataAccess.Client genannt finden.

In meinen anderen Projekten verwende ich Oracle.ManagedDataAccess.Client, aber Eingabe Oracle.DataAccess.Client in meiner Verbindungszeichenfolge - und es funktioniert gut!

Die einfache Frage - wie verbinde ich mich mit Oracle mit EF6? Über verwalteten und nicht verwalteten Datenzugriff? (da es kein nugget für das nicht verwaltete Framework Version gibt)

Antwort

0

Ich habe keine klare Antwort für Sie, aber die folgenden können helfen, die Ursache zu finden.

Oracle.ManagedDataAccess.Client und Oracle.DataAccess.Client Verwenden Sie verschiedene Methoden zur Auflösung von TNS-Aliase, ich nehme an, dass das Problem besteht.

Oracle.ManagedDataAccess.Client Kontrollen folgende:

  1. Datenquelle Alias ​​im dataSources Abschnitt unter <oracle.manageddataaccess.client> Abschnitt in der NET-Konfigurationsdatei (d.h. machine.config, web.config, user.config).
  2. Datenquelle Alias ​​in der tnsnames.ora Datei an dem durch TNS_ADMIN in der NET-Konfigurationsdatei spezifiziert. Speicherorte können aus absoluten oder relativen Verzeichnispfaden bestehen.
  3. Datenquelle Alias ​​in der tnsnames.ora Datei in demselben Verzeichnis wie die .exe.

während Oracle.DataAccess.Client sucht tnsnames.ora Datei in diesen Orten:

  1. Umgebungsvariable TNS_ADMIN
  2. Registrierungswert HKLM\SOFTWARE\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN, resp. HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_{Oracle_Home_Name}\TNS_ADMIN
  3. Ordner %ORACLE_HOME%\network\admin
  4. Aktuelles Verzeichnis (das Verzeichnis unterschiedlich sein können, wo Ihre Anwendung befindet)
  5. Ordner, in dem Sie Ihre Anwendung befindet
Verwandte Themen