Laden...

Wie kann ich aus VS 2019 auf eine Oracle Datenbank mit Entity Framework zugreifen?

Erstellt von sindibad vor 3 Jahren Letzter Beitrag vor 3 Jahren 1.957 Views
S
sindibad Themenstarter:in
110 Beiträge seit 2012
vor 3 Jahren
Wie kann ich aus VS 2019 auf eine Oracle Datenbank mit Entity Framework zugreifen?

verwendetes Datenbanksystem: <Oracle client 11.2>
Ich möchte in visual studio 2019 auf eine Oracle Datenbank mit Entity framework zugreifen.
Ich habe oracle developer tools für vs2019, Oracle.ManagedDataAccess und Oracle.ManagedDataAccess.EntityFramework installiert.
wenn ich eine Connection hinzufügen möchte mit dem managed odp driver, bekomme ich eine Fehlermeldung bei kerberos Authentification:

Fehlermeldung:
The error message reads "NA Kerberos5: Authentication handshake failure at stage: Could not load file or assembly 'Oracle.ManagedDataAccessIOP.dll' or one of its dependencies. The specified module could not be found."

der Oracle Client/Server benutzt Kerberos.

Ich habe diesen Link gefunden https://community.oracle.com/thread/3731184
aber Ich komme nicht weiter.

hat jemand schon hier Erfahrung mit vs2019, oracle und EF gemacht?

4.931 Beiträge seit 2008
vor 3 Jahren

Und? Hast du entsprechend der Links MIT Kerberos ("for Windows 4.1") bei dir installiert?
Oder eben den Oracle Client 12c installieren.

S
sindibad Themenstarter:in
110 Beiträge seit 2012
vor 3 Jahren

Ich habe jetzt MIT kerberos installiert. Ich bekomme immer noch die selbe Fehlermeldung.
gesucht wird die Version 4.122.19.1 von der assembly 'Oracle.ManagedDataAccessIOP.dll'.
die dll existiert ist unter nuget package. wo sucht vs diese dll?

16.806 Beiträge seit 2008
vor 3 Jahren

Ich möchte in visual studio 2019 auf eine Oracle Datenbank mit Entity framework zugreifen.

Was genau willst Du machen? Die Beschreibung hier kann nicht sein.

Entweder willst Du programmatisch mit .NET und EF auf eine Oracle Datenbank zugreifen (wobei hier eben Visual Studio keinerlei Rolle spiel, weil es nur ein Editor ist) oder mit Visual Studio (und dessen Datenbank-Explorer) und der Oracle Developer Tool Extension den auf eine Oracle Datenbank zugreifen (was aber im Hintergrund kein EF verwendet).

Wenn Du ersten Punkt meinst, Du also mit selbst geschriebenem Code auf eine Oracle Datenbank zugreifen willst (aber auch hier muss ich leider raten):
Die Oracle ODP Pakete unterstützen kein Kerberos bei .NET Core, weil .NET Core keine Kerberos APIs hat.

Aber da keiner hier wirklich lust hat zu raten:
Erklär bitte, was Du wirklich machen willst.

S
sindibad Themenstarter:in
110 Beiträge seit 2012
vor 3 Jahren

Ok. ich versuche es nochmal zu beschreiben:

als Tool benutze ich vs 2019 und vs 2010.

Ich möchte eine .net library erstellen mit c#, die auf der Oracle Db zugreift und die Daten ausliest.
diese Library wird dann von anderen clients verwendet.

für den DB Zugriff,möchte ich entity framework benutzen (database first).

Oracle Client/server benutzt kerberos

um entity framework zu benutzen mit vs 2019, habe ich ODT und die oracle packages installiert.
Ich möchte ein ado.net entity data model erstellen und die Klassen generieren lassen. bei der DB-Verbindung bekomme ich die kerberos Fehlermeldung ach nach Installation von MIT kerberos

ich habe schon den Zugriff auf einer oracle db in einem anderen Projekt mit vs 2010 und entity framework mit dem alten odp.net (ODAC) realisiert.

Ich hoffe, es ist klar jetzt was ich vorhabe. wenn es mit EF nicht geht, finde ich schade und muss auf den klassischen Weg mit commands und querys arbeiten.

mit sql server von microsoft funktioniert alles einwandfrei mit vs und ef. aber hier muss mich mit oracle ärgern.

16.806 Beiträge seit 2008
vor 3 Jahren

Gut, also raten wir einfach mal weiter:

Da Du VS2019 UND VS2010(?) verwendest, reden wir also von .NET Framework und nicht von .NET Core: denn VS2010 kann keine .NET Core Projekte öffnen.

Prinzipiell geht es Dir aber anders als beschrieben gar nicht um Visual Studio, sondern um den Code.
Da wir nun durch Ausschlussverfahren von Informationen vom .NET Framework reden, sprechen wir also auch von EF6 und nicht von EFCore.

Jetzt ist die Krux an der Sache: Oracle hat es all die Jahre nie geschafft für EF einen wirklich stabiles ODP Paket umzusetzen.
Ob Dein Paket mit der Oracle Client Version kompatibel ist; das musst Du immer von Hand prüfen. Das könnte durchaus den Fehler auslösen. Kompatibilitäten und Oracle halt... nichts neues.
Was Dein genanntes "ODT" ist, das weiß ich nicht. Kenne nur ODP im Zusammenhang von Oracle.

Ich möchte ein ado.net entity data model erstellen und die Klassen generieren lassen.

Wenn Du damit EDMX meinst: das ist seit Jahren, wirklich Jahren - bestimmt EF 4 Zeiten - schon nicht mehr der empfohlene Weg.
EDMX ist nicht Code First.

Hinweis: soweit ich weiß gibt es kein einziges Oracle ODP Paket, das über NuGet von VS2010 konsumiert werden kann.
Du wirst immer mindestens VS2012 oder gar VS2015 brauchen - oder eben Dein VS2019.

S
sindibad Themenstarter:in
110 Beiträge seit 2012
vor 3 Jahren

Hallo und Danke für die Antworten,

damit du weniger raten musst): , noch ein paar Hinweise

  • Ich habe vs 2010 und 2019 zur Verfügung aber natürlich möchte ich vs 2019 benutzen, soweit es geht um seine Vorteile zu nutzen.

  • Ich musste meine Library mit .net/EF6 und nicht mit .net core erstellen weil wie du geschrieben hast: Die Oracle ODP Pakete unterstützen kein Kerberos bei .NET Core

  • mit ODT meine ich Oracle Developer Tools for Visual Studio 2019 Link

  • Ich weiss, dass Code first die bessere Variante ist gegenüber database first, aber in mein Fall, existiert die Datenbank schon. d.H. ich kann nur database first benutzen um die entitys und dbcontext aus der Datenbank zu generieren oder?

16.806 Beiträge seit 2008
vor 3 Jahren
  • mit ODT meine ich Oracle Developer Tools for Visual Studio 2019
    >

Das spielt keine Rolle, weil Visual Studio ein Entwicklertool ist. Die Extension spielen für Deine Entwicklerzeit eine Rolle, aber nicht für die Ausführung der Anwendung.
Deine Fehlermeldung wird auch von der Laufzeit geworfen, und nicht von Visual Studio.
Visual Studio "sucht" auch nicht nach irgendwelchen DLLs während der Laufzeit, sondern das macht ebenfalls die Runtime - und zur Build-Zeit der Compiler; aber nicht Visual Studio.
Du kannst C# auch problemlos mit einem Notepad programmieren und alles, was Visual Studio ausführt, von Hand ausführen.

Schau Dir nochmal an, was .NET ist - und was nicht. Was die Aufgabe von Visual Studio ist und Co.
Das sind Deine Werkzeuge, mit der Du entwickelst; Du musst die Funktionsweisen im Griff haben.

Ich weiss, dass Code first die bessere Variante ist gegenüber database first, aber in mein Fall, existiert die Datenbank schon. d.H. ich kann nur database first benutzen um die entitys und dbcontext aus der Datenbank zu generieren oder?

Code First = Du erstellst die POCOs
Database First = ein Generator erstellt die POCOs anhand eines fertigen Modells (+ noch Overhead)

Es gibt absolut kein Problem eine vorhandene Datenbank mit selbst geschriebenen POCOs zu verwenden. Siehe auch ein 10 Sekunden-Blick in die Doku: Code First to an Existing Database - und ja, das geht auch ohne Visual Studio Code Generator.
Problem: es gibt kein Invest mehr in den Generator; man hat eigentlich schon gedacht, dass der Generator nicht mal mehr in VS2019 enthalten ist.
Nun wirds also evtl. erst VS2021 sein, oder wie auch immer die nächsten Version heissen wird.

Du baust Dir damit also eine Basis, die Du nicht langfristig, sondern kurzfristig ersetzen musst.

Ich tippe aber zum Problem, dass Du entweder noch was bei den Kerberos Dependencies was vergessen hast, oder es ein Version Issue gibt.