Laden...

ADO.NET Entity Data Model mit SQL Compact Connection und SQL Connection

Erstellt von Schildkroete vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.190 Views
S
Schildkroete Themenstarter:in
80 Beiträge seit 2012
vor 10 Jahren
ADO.NET Entity Data Model mit SQL Compact Connection und SQL Connection

verwendetes Datenbanksystem: SQL Compact
verwendetes Datenbanksystem: MS SQL 2008

Hallo zusammen,

irgendwie ist es mir niemals aufgefallen, da ich das Entity Data Model nur für Datenbanken eingesetzt habe, wo Standard der Provider System.Data.SqlClient verwendet werden kann (MS SQL & MySQL) und somit die Klasse SqlConnection.

Jetzt stehe ich doch vor einem Problem, dass ich ein Entity Data Model nur für ein System verwenden kann. Sprich, wenn das Entity Data Model davor nur mit einem SQL Server gearbeitet hat (Model aus der Datenbank erstellen bzw. Datenbank aus Modell generieren), so kann man ohne Probleme unendlich viele Variablen initialisieren mit unterschiedlichen Verbindungen zu unterschiedlichen SQL Servern.

Möchte ich aber das gleiche Model für eine SQL Compact Datenbank verwenden, so bekomme ich immer wieder die Fehlermeldung, dass die Tabelle in der DB nicht existiert, obwohl sie per Script angelegt wurde.
Der Connectionstring ist ok und funktioniert. Wenn ich die Datenbank öffne und schließe oder die ObjectSets abrufe (in dem Fall erhalte ich eine leere Collection, da nichts drinnen ist). Aber das abspeichern von neuen Datenobjekten geht schief.

Die Fehlermeldung lautet : ArgumentException: Die Verbindung weist nicht Typ 'System.Data.SqlClient.SqlConnection' auf.

Im Debuger habe ich schon die kompletten Objekten auseinander genommen und finde nichts.

Danke im Voraus

Schildkroete

----ehm............

5.657 Beiträge seit 2006
vor 10 Jahren

Hi Schildkroete,

deine Beschreibung ist für mich nicht nachvollziehbar. Wenn ich es richtig verstehe, willst du die Entitys jetzt statt in einen SQL-Server in eine SQL Compact Datenbank speichern. Dabei wird die Fehlermeldung geworfen. Soweit richtig?

Die Fehlermeldung lautet : ArgumentException: Die Verbindung weist nicht Typ 'System.Data.SqlClient.SqlConnection' auf.

Bist du der Fehlermeldung mal nachgegangen?

Im Debuger habe ich schon die kompletten Objekten auseinander genommen und finde nichts.

Was heißt Objekte auseinandergenommen? Wie bist du vorgegangen, was hast du gesucht, was meinst du mit "ich finde nichts"?

Christian

Weeks of programming can save you hours of planning

S
Schildkroete Themenstarter:in
80 Beiträge seit 2012
vor 10 Jahren

Vielleicht hab ich etwas unverständlich geschrieben.

Fakt ist, dass ich ein Entity Model sowohl für SQL Compact als auch für MS SQL, MySQl verwenden möchte.

----ehm............

M
334 Beiträge seit 2007
vor 10 Jahren

nur so als Hinweis, für die Verbindung zu SQL Compact brauchst du eine SqlCeConnection. Da ist wohl irgendwo eine Überprüfung auf eine SqlConnection drin.
Aber das kann man ja mit über den Stacktrace rausfinden.

SqlConnection ist ausschließlich für eine Verbindung zum MS SQL Server da. MySQL kann man damit nicht ansprechen.

Und ich stimme MrSparkle zu, was du da schreibst hört sich verwirrend an. Bitte beschreib genau wo das Problem ist und was du bisher versucht hast.

S
Schildkroete Themenstarter:in
80 Beiträge seit 2012
vor 10 Jahren

Also,

dass ich SQlCeCompact benötige, ist mir bewusst. Die Connection Strings habe ich ja soweit auch konfiguriert bzw. erstellt.


<connectionStrings>
    <add name="EntityModelPlanContainer" connectionString="metadata=res://*/DataBaseOperator.EntityModelPlan.csdl|res://*/DataBaseOperator.EntityModelPlan.ssdl|res://*/DataBaseOperator.EntityModelPlan.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=OPTI-790\SQL_DEV;initial catalog=OfficeDBMSSQL;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient"/>
    <add name="EntityModelPlanContainerTest" connectionString="metadata=res://*/DataBaseOperator.EntityModelPlan.csdl|res://*/DataBaseOperator.EntityModelPlan.ssdl|res://*/DataBaseOperator.EntityModelPlan.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=OPTI-790\SQL_DEV;initial catalog=OfficeDBMSSQL_T;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient"/>
    <add name="EntityModelPlanContainerCompact" connectionString="metadata=res://*/DataBaseOperator.EntityModelPlan.csdl|res://*/DataBaseOperator.EntityModelPlan.ssdl|res://*/DataBaseOperator.EntityModelPlan.msl;provider=System.Data.SqlServerCe.3.5;provider connection string=&quot;Data Source=C:\Users\AErbert\Documents\CYCOT OM\OfficeDBSQLCE.sdf&quot;" providerName="System.Data.EntityClient"/>
  </connectionStrings>

Verwende ich die Verbindung mit dem Namen **EntityModelPlanContainer ** oder EntityModelPlanContainerTest, so funktioniert alles. Verwende ich EntityModelPlanContainerCompact kommt eine Fehlermeldung wie oben beschrieben oder beim Speichern, wenn ich ein neues Objekt in eine Tabelle hinzufügen möchte: Die angegebene Tabelle ist nicht vorhanden. [ tblComAddressType ]. Obwohl das EntityConnection keine Fehler bringt, wenn ich Open aufrufe. Alles wird richtig angezeigt. Der Datenbankpfad, die Serverversion usw.

Grund ist, ich möchte Daten aus dem MS SQL Server raus holen und in die SQL Compact DB schreiben. Also ein Kopiervorgang. Daten zwischen SQL Servern mit dem gleichen Entity Data Model zu kopieren funktioniert. Dass ich die Datensätze bzw. jedes einzelne Entity mit Detach freigeben muss, ist mir auch bewusst. Doch ich komme nicht mal bis zu dem Punkt, dass ich ein neu erstelltes Entity abspeichern kann, nach dem idem Entity Data Model eine neue Verbindung zugewiesen habe (davor noch neu initialisiert).

----ehm............

S
Schildkroete Themenstarter:in
80 Beiträge seit 2012
vor 10 Jahren

Anders gefragt, kann es sein, dass es nicht möglich ist ein Entity Data Model sowohl für SqlConnection als auch für SqlCeConnection zu verwenden?

----ehm............

M
334 Beiträge seit 2007
vor 10 Jahren

ich hab leider vom EF keine Ahnung.

Laut Technet ist es mit Einschränkungen möglich: Entity Framework (SQL Server Compact)

S
Schildkroete Themenstarter:in
80 Beiträge seit 2012
vor 10 Jahren

Ich glaube, ich muss mein Vorhaben etwas überdenken und eine andere mobile DB suchen.....

----ehm............

S
Schildkroete Themenstarter:in
80 Beiträge seit 2012
vor 10 Jahren

Problem gelöst.... nach paar Tagen habe ich eine Lösung gefunden, die eigentlich, wenn man überlegt, wirklich Simple Clever ist.
Na ja, das Einfachste ist am schwersten:

Link zur Lösung 😃

----ehm............