Laden...

erledigt - Entity Framework: Erstellen mit Create Database klappt nicht mehr

Erstellt von m.grauber vor 9 Jahren Letzter Beitrag vor 9 Jahren 1.995 Views
M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 9 Jahren
erledigt - Entity Framework: Erstellen mit Create Database klappt nicht mehr

verwendetes Datenbanksystem: <SQL-Server 2010>

Hallo!

Bisher wurde mit ExecuteStoreCommand ein CREATE DATABASE - Befehl problemlos abgesetzt.

Seit der neuen Entity Framework-Version, klappt das auf einmal nicht mehr (Code wurde nicht geändert).

Es wird der Fehler "Die CREATE DATABASE-Anweisung ist in einer Transaktion mit mehreren Anweisungen nicht zulässig." angezeigt.

  • Es wird vorher nur mit USE master die Master-Datenbank geöffnet. Sonst nichts weiter.

  • Alternativ bereits vorher probiert SET IMPLICIT_TRANSACTIONS OFF. Bringt auch nichts.

  • Rechte sind auch vorhanden, es ist kein weiterer Befehl angehangen.

Arbeite mit DatabaseFirst-Ansatz.

Was hat sich da geändert?

Auch hier steht nichts genauer beschrieben: Fehler beim Erstellen einer Datenbank

Danke

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

16.842 Beiträge seit 2008
vor 9 Jahren

Wenn Du die Fehlermeldung in Englisch hättest, wäre alles viel einfacher.> Fehlermeldung:

CREATE DATABASE statement not allowed within multi-statement transaction

  1. Regel: In den gängigen Suchmaschinen immer nach der englischen Fehlermeldung suchen.

Dazu findet man als ersten Treffer in der MSDN:

You cannot use CREATE DATABASE DDL statements inside of the transaction and you cannot rollback creating of the objects actions.

Dazu auch in der Dokumentation von CREATE DATABASE:

The CREATE DATABASE statement must run in autocommit mode (the default transaction management mode) and is not allowed in an explicit or implicit transaction. For more information, see Autocommit Transactions.

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 9 Jahren

Hallo Abt!

über die Suche bin ich auch auf SET IMPLICIT_TRANSACTIONS gekommen. Leider bringt das auch nichts.

Ich verbinde mich zuerst mit der master-Datenbank und setze dann direkt den CREATE DATABASE ab. Teilweise setze ich vorher IMPLICIT_TRANSACTIONS. Sonst mache ich nichts weiter. Trotzdem der Fehler beim Erstellen der Datenbank.
Auch führe ich diese Befehle einzeln und nicht zusammen aus.

Bisher ist es genau so gelaufen. Es wurde daran nichts geändert und mit einem Mal führt es zu dem Problem.

Was ist das?

Danke!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

16.842 Beiträge seit 2008
vor 9 Jahren

Weil Dein Call wohl in einer TransactionScope liegt.
Da Du nur von "neuer Version" sprichst, aber partu nicht sagst, welche das genau ist, kann man Dir auch nicht aus der ChangeList vorlesen.

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 9 Jahren

Hallo Abt!

Entschuldige! Die neuste derzeit installierbare EF-Version ist die 6.1.1, wobei ich ein Update vom EF 5.0 gemacht habe. Gearbeitet wird mit ObjectContext.
Was noch auffällt: Evtl. wurde in diesem Zuge auch das .NET Framework 4 auf 4.5 geändert. - Leider nicht ganz nachvollziehbar, da wir immer nur Sicherungen der letzten Stände haben und die Datenbank bereits länger nicht mehr angelegt hatten.

Es sind wirklich nur die beiden Einzeiler, wobei in der 2. Zeile dann der erwähnte Fehler auftritt:

mydataentities.ExecuteStoreCommand("USE master");
mydataentities.ExecuteStoreCommand("CREATE DATABASE test");

Auch IMPLICIT_TRANSACTIONS vorher abzusetzen, bringt nichts.

USING(TransactionScope... wird nicht genutzt. Die Befehle werden einfach ausgeführt.

Habe zudem festgestellt, dass auch wenn die Datenbank per Hand in der Management Console angelegt wird, die restlichen Folgebefehle (einzeln nacheinander abgesetzt) die die Datenbank betreffen, z. B. SET ... in der Datenbank auch nicht ausgeführt werden. Die Tabellen, Felder und Indizes können aber problemlos angelegt werden, wenn man zuvor die Datenbank händisch in der Management-Console angelegt hat.

Ein Wechsel in die DB mit "USE" ist ebenso möglich. Habe aber wie auch in der bestehenden Datenbank volle Berechtigung.

Versucht auch als sa und mit Windows-Authentifizierung. Auch bei diesen Anmeldungen zusätzlich weitere Rechte in der MMC vergeben. Ebenfalls kein Erfolg.

  • Alle weiteren Einstellungen der neu erstellten Datenbank sind mit der bereits bestehenden Datenbank identisch. (Bis auf den Namen)

  • Auch "Handling of transaction commit failures" in der von Dir geposteten Seite bringt mich nicht weiter. Evtl. hat es etwas mit dieser Änderung daran zu tun?

Nur die Datenbank kann also nicht neu erstellt werden und Datenbankeinstellungen können nicht per ALTER DATABASE abgesetzt werden. Alles andere funktioniert.

Früher hat es wie gesagt 1a funktioniert. Am Code wurde nichts geändert.

Bitte nochmals sehr um Hilfe! 🙁 🙁

Grüße

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 9 Jahren

Da es hier scheinbar keine Lösung gibt, wird die Datenbank mit den Grundtabellen etc. nun ausgeliefert und manuell importiert.

Damit ist das Thema geschlossen. Danke für die Hilfe.

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]