Grundsätzlich habe ich ein Tutorial befolgt und beschlossen, die .mdf
Datei danach zu löschen .
Wenn ich jetzt versuche, die Anwendung auszuführen, wird der folgende Fehler angezeigt (der Titel dieses Threads). Der Code, bei dem ich den Fehler erhalte, wird unten angezeigt (ASP.NET MVC 4):
OdeToFoodDB db = new OdeToFoodDB();
public ActionResult Index()
{
var model = db.Restaurants.ToList();
return View(model);
}
Meine Verbindungszeichenfolge lautet wie folgt:
<add name="DefaultConnection"
connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=OdeToFoodDb;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\OdeToFoodDb.mdf"
providerName="System.Data.SqlClient" />
Ich habe versucht, den SQL Server-Objekt-Explorer zu betrachten, aber er sieht folgendermaßen aus:
Außerdem werden im Server-Explorer keine Datenverbindungen angezeigt.
Und wenn ich versuche, eine neue Verbindung im Server-Explorer hinzuzufügen, werden keine Datenbanken mit Namen angezeigt OdeToFoodDb
.
Entschuldigen Sie diese umfassende Frage, aber ich bin neu in Entity Framework und verstehe nicht ganz, was hier falsch ist.
quelle
Antworten:
Sehen Sie sich Folgendes an: Entity Framework erstellt keine Datenbank
Bearbeiten Diese Antwort wurde akzeptiert, da sie den Fehler und die von OP verwendete Problemumgehung bestätigt (das Umbenennen der Datenbank könnte helfen ). Ich stimme voll und ganz zu, dass das Umbenennen der Datenbank nicht wirklich akzeptabel ist und das Problem nicht vollständig löst . Leider habe ich die anderen Möglichkeiten zur Lösung in SSMS nicht überprüft.
quelle
Ich denke, dass Sie für SQL Server Local Db die
Initial Catalog
Eigenschaft nicht verwenden sollten . Ich schlage vor zu verwenden:<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\OdeToFoodDb.mdf" providerName="System.Data.SqlClient" />
Ich denke, dass die lokale Datenbank nicht mehrere Datenbanken in derselben MDF-Datei unterstützt. Geben Sie daher an, dass ein anfänglicher Katalog nicht unterstützt wird (oder nicht gut unterstützt wird und ich einige seltsame Fehler habe).
quelle
Führen Sie in der Package Manager-Konsole Folgendes aus:
sqllocaldb.exe stop v11.0
sqllocaldb.exe delete v11.0
Führen Sie Ihr Projekt aus
quelle
v11.0
inMSSQLLocalDB
diedata source=(LocalDb)\MSSQLLocalDB;...
Entfernen Sie diese Zeile aus der Verbindungszeichenfolge, die dies tun soll;) "AttachDbFilename = | DataDirectory | Whateverurdatabasenameis-xxxxxxxxxx.mdf"
quelle
"Die Datei 'C: \ Github \ TestService \ TestService \ App_data \ TestService.mdf kann nicht als Datenbank' TestService 'angehängt werden.
Wenn die obige Fehlermeldung angezeigt wird, führen Sie die folgenden Schritte aus.
quelle
Ich habe das gleiche Problem konfrontiert. Die folgenden Schritte in VS 2013 haben das Problem für mich gelöst:
quelle
So beheben Sie dies mit SQL SERVER Management Studio
Ihr Problem: Sie erhalten eine Fehlermeldung wie "Die Datei" YourDB.mdf "kann nicht als Datenbank" YourConnStringNamedContext "angehängt werden.
Grund: tritt auf , weil Sie die Sicherungsdateien .mdf, ldf gelöscht haben, ohne die Datenbank in der laufenden Instanz von SqlLocalDb tatsächlich zu löschen. Das erneute Ausführen des Codes in VS hilft nicht, da Sie keine Datenbank mit demselben Namen neu erstellen können (und deshalb funktioniert das Umbenennen, lässt aber den alten Phantom-Datenbanknamen herumliegen).
Das Update : Ich verwende VS2012 und übernehme es ähnlich für eine andere Version.
Navigieren Sie zum unteren Pfad und geben Sie ein
Über cmd werden die Instanznamen angezeigt, einschließlich 'v11.0'.
Wenn die Instanz bereits ausgeführt wird, geben Sie an der Eingabeaufforderung ein
Beachten Sie die folgende Info Besitzer: YourPCName \ Benutzername, Zustand: Laufen, Instance Pipenamen: np:. \ \ Pipe \ LocalDB # 12345678 \ Tsql \ query, wo 123456789 ist eine zufällige alphanumerische
Wenn State nicht ausgeführt oder gestoppt wird, starten Sie die Instanz mit
und extrahieren Sie die gleichen Informationen wie oben.
Geben Sie im Dialogfeld "Verbinden" von SS Management Studio Folgendes ein
Suchen Sie nach dem Verbinden die Phantom-Datenbank, die Sie gelöscht haben (z. B. YourDB.mdf sollte eine Datenbank mit dem Namen YourDB erstellt haben), und löschen Sie sie wirklich.
Erledigt! Sobald es weg ist, sollte VS EF kein Problem damit haben, es neu zu erstellen.
quelle
Sie haben bereits eine alte Kopie dieser Datenbank im Server Explorer installiert. Es handelt sich also um eine einfache Namenskollision im Server Object Explorer / SQL Server. Sie haben wahrscheinlich denselben Datenbankkatalognamen bereits erstellt, bevor Sie ihn in den Ordner Apps_Data verschoben haben. Damit der Datenbankname bereits existiert und nur gelöscht werden muss.
Gehen Sie einfach zu Visual Studio> Ansicht> SQL Server-Objekt-Explorer und löschen Sie den alten Datenbanknamen und seine Verbindung. Wiederholen Sie Ihre App erneut und sie sollte die MDF-Datei in App_Data installieren und dieselbe exakte Datenbank im Server-Explorer erneut erstellen.
quelle
Entfernen Sie gemäß @ davide-icardi den "Initial Catalog = xxx;" Suchen Sie in web.config nach Ihrer Azure-Veröffentlichungsprofildatei, um sie auch hier zu entfernen:
[YourAspNetProject-Pfad] \ Properties \ PublishProfiles [YourAspNetProjectName] .pubxml
<PublishDatabaseSettings> <Objects xmlns=""> <ObjectGroup Name="YourAspNetProjectName" Order="1" Enabled="True"> <Destination Path="Data Source=AzureDataBaseServer;Initial Catalog=azureDatabase_db;User ID=AzureUser_db_sa@AzureDataBaseServer;Password=test" /> <Object Type="DbCodeFirst"> <Source Path="DBMigration" DbContext="YourAspNetProjectName.Models.ApplicationDbContext, YourAspNetProjectName" MigrationConfiguration="YourAspNetProjectName.Migrations.Configuration, YourAspNetProjectName" Origin="Configuration" /> </Object> </ObjectGroup> </Objects> </PublishDatabaseSettings>
quelle
Ich habe festgestellt, dass das Problem durch Auskommentieren des Kontextabschnitts behoben wurde, der zum Initialisieren der Datenbank verwendet wurde. Havnt hatte noch Zeit herauszufinden, was mit den Seeding-Anweisungen nicht stimmte, aber das Entfernen des Seeding löste das Problem.
quelle
Ich hatte den gleichen Fehler, als ich dem Tutorial "Erste Schritte mit ASP.NET MVC 5 | Microsoft Docs" folgte. Ich war in Visual Studio 2015. Ich habe View-> SQL Server Object Explorer geöffnet und die nach dem Lernprogramm benannte Datenbank gelöscht, dann konnte es funktionieren. Siehe Löschen einer .mdf-Datei aus app_data, da eine Ausnahme die Datei nicht als Datenbank anhängen kann
quelle
Bin auf dieses Problem gestoßen. In meinem Fall durch Löschen der .mdf verursacht, während iispexress noch lief und daher noch die DB verwendet. Klicken Sie mit der rechten Maustaste auf iisexpress in der Taskleiste und klicken Sie auf Beenden. DANN löschen Sie die MDF, um zu verhindern, dass dieser Fehler tatsächlich auftritt.
Um diesen Fehler zu beheben, klicken Sie einfach in VS mit der rechten Maustaste auf den Ordner App-Data. Fügen Sie ein neues Element hinzu> SQL Server-Datenbank. Name: [Verwenden Sie den vom Update-Datenbankfehler angegebenen Datenbanknamen] Klicken Sie auf Hinzufügen.
quelle
Ändern Sie einfach den Datenbanknamen aus der Datei auf Projektebene web.config und aktualisieren Sie die Datenbank.
connectionString = Data Source = (LocalDb) \ MSSQLLocalDB; AttachDbFilename = "| DataDirectory | \ aspnet-Projektname-2018041307050 6 .mdf"; Initial Catalog = "aspnet - 2018041307050 6 "; Integriert
Ändern Sie die fette Ziffer in eine andere Zahl:
connectionString = Datenquelle == (LocalDb) \ MSSQLLocalDB; AttachDbFilename = "| DataDirectory | \ aspnet-Projektname-2018041307050 7 .mdf"; Initial Catalog = "aspnet - 2018041307050 7 "; Integriert
quelle
Ich habe nicht alle Antworten gelesen, aber wenn Ihre
.mdf
Datei NICHT Teil des SQL-Installationspfads istC:\Temp
, haben die SQL Database Engine-Dienstkonten keine Berechtigung zum Erstellen und Schreiben in die.ldf
Datei oder sogar zum Lesen der.mdf
Datei .Die Lösung besteht darin, dass Sie dem SQL Server-Datenbankmodul-Dienstkonto, auf dem der SQL-Instanzdienst ausgeführt wird, Dateisystemberechtigungen erteilen müssen. Daher habe ich meinem
C:\Temp
Pfad, der meine.mdf
Datei für die KontenNT Service\MSSQL$SQLEXPRESS01
und dieNT Service\MSSQL$MSSQL2016
Konten enthielt, über Windows Explorer die volle Kontrolle über die Berechtigungen erteilt .Hier ist ein Microsoft-Artikel , der genau dieses Problem beschreibt.
quelle
Erstellen Sie Ihre Datenbank neu. Löschen Sie es nicht und Ihre App sollte weiterhin funktionieren.
quelle
public class OdeToFoodDB : DbContext { public DbSet<Restaurant> Restaurants { get; set; } public DbSet<RestaurantReview> Reviews { get; set; } }
Und dann initialisiere ich es (aber hier bekomme ich den Fehler):OdeToFoodDB db = new OdeToFoodDB(); public ActionResult Index() { var model = db.Restaurants.ToList(); return View(model); }
Ich hatte den gleichen Fehler. Das Seltsame war, ich hatte ein neues Projektformular, dort funktionierte es perfekt und ein anderes, viel größeres Projekt, bei dem ich immer auf diese Fehlermeldung stieß.
Das perfekt funktionierende Projekt erstellt (fast) immer automatisch die Datenbank (einschließlich der Dateien). Es kann ein beliebiger Befehl sein, lesen, schreiben, aktualisieren. Die Dateien werden erstellt. Natürlich nutzt es
Es gibt nur einen Fall, in dem Probleme auftreten: WENN die MDF automatisch erstellt wird und Sie die MDF- und Protokolldatei löschen. Dann war es soweit. Verabschieden Sie sich von Ihrer Autokreation ...
Die einzige Möglichkeit, das Problem zu beheben, war wie folgt:
sqllocaldb stop v11.0 & sqllocaldb delete v11.0
Danach ist alles wieder normal (und alle anderen von LocalDB verwalteten Datenbanken sind ebenfalls verschwunden!).
EDIT: Das war nicht wahr. Ich habe es gerade ausprobiert und die Version 11.0 wird automatisch neu erstellt und alle MDFS bleiben verfügbar. Ich habe es nicht mit "nicht dateibasierten" LocalDBs versucht.
Das Verwirrende ist, ich habe auch diesen Fehler bekommen, wenn etwas anderes nicht stimmte. Mein Vorschlag ist also, wenn Sie sicherstellen möchten, dass Ihr DB-Setup solide und solide ist: Erstellen Sie eine neue Lösung / ein neues Projekt von Grund auf neu, verwenden Sie die grundlegendsten DB-Befehle (Entität hinzufügen, alle Entitäten anzeigen, alle Entitäten löschen) und sehen Sie ob es funktioniert.
Wenn JA, liegt das Problem irgendwo im Abgrund der VS2013-Konfiguration und -Versionierung sowie von Nuget und anderen Dingen.
WENN NEIN, haben Sie ein Problem mit Ihrer LocalDB-Installation.
Für alle, die wirklich verstehen wollen, was in EF vor sich geht (und ich bin mir immer noch nicht sicher, ob ich das tue :-)) http://odetocode.com/Blogs/scott/archive/2012/08/14/a-troubleshooting- Leitfaden für Entity-Framework-Verbindungen-Amp-Migrations.aspx
PS: Schieben Sie mich, wenn Sie das laufende Beispielprojekt benötigen.
quelle
Seltsamerweise hat mir für genau das gleiche Problem geholfen, das 'auf' v11.0 'im folgenden Abschnitt der Konfiguration zu ändern.
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters>
quelle
Ich bin kürzlich auf das gleiche Problem gestoßen. Hier ist eine Sache zu überprüfen. In Visual Studio gibt es drei Stellen, an denen wir die Datenbank überprüfen und entfernen sollten.
1. Solution Explorer's App_Data folder 2. Server Explorer's Data Connection menu 3. SQL Server Object Explorer
Wenn ich die Datenbank von den ersten beiden Punkten lösche, tritt der Fehler weiterhin auf. Daher musste ich die Datenbank auch aus dem SQL Server-Objekt-Explorer löschen. Dann könnte ich problemlos den Befehl 'update-database' ohne Fehler ausführen. Hoffe das hilft.
quelle
Wir sind selbst darauf gestoßen, als wir
dotnet ef database update
ASP.Net Core 2.1 verwendet haben. Es sieht so aus, als würden relative Pfade nicht unterstütztAttachDbFileName
.System.Data.SqlClient.SqlException (0x80131904): Cannot attach the file '.\OurDbName.mdf' as database 'OurDbName'.
Ich wollte das hier nur für andere Leute ausdrücken, die vielleicht darauf stoßen. Der "Fix" verwendet absolute Pfade.
Siehe auch: https://github.com/aspnet/EntityFrameworkCore/pull/6446
quelle
Wenn Sie bereits Migrationen anwenden, kann dies das Problem beheben.
Gehen Sie zu Ihrer Web.config und aktualisieren Sie Ihre Verbindungszeichenfolge basierend auf Ihren Migrationsdateien.
Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\aspnet-GigHub-201802102244201.mdf;Initial Catalog=aspnet-GigHub-201802102244201;
Die Datenstrings sollten mit den ersten Nummern Ihrer Migrationen übereinstimmen.
quelle
Stieß auf das ähnliche Problem nicht genau das gleiche. Ein Fall von Datenbank existierte bereits. Das Problem wurde durch folgenden Code gelöst.
<add name="DefaultConnection" connectionString="Data Source=.;AttachDbFilename=|DataDirectory|\aspnet-EjournalParsing-20180925054839.mdf;Initial Catalog=aspnet-EjournalParsing-20180925054839;Integrated Security=True" providerName="System.Data.SqlClient" />
quelle
In meinem Fall wurde
Initail Cataloge=....
das Problem durch Entfernen aus der Verbindungszeichenfolge behobenquelle