it-swarm.com.de

Die Datei * .mdf kann nicht als Datenbank angehängt werden

Grundsätzlich habe ich ein Tutorial verfolgt und beschlossen, die .mdf-Datei danach zu löschen.

Wann immer ich versuche, die Anwendung auszuführen, erhalte ich den folgenden Fehler (den Titel dieses Threads) ... Der Code, in dem der Fehler angezeigt wird, 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 anzusehen, es sieht jedoch wie folgt aus:

Im Server-Explorer werden auch keine Datenverbindungen angezeigt.

Wenn ich versuche, eine neue Verbindung in Server Explorer hinzuzufügen, werden keine Datenbanken mit dem Namen OdeToFoodDb angezeigt.

Es tut mir leid für diese weite Frage, aber ich bin neu im Entity Framework und verstehe nicht, was hier falsch läuft.

62
John Mayer

Schauen Sie sich das an: Entity Framework erstellt keine Datenbank

Ich würde versuchen, der Datenbank eine .__ zu geben. anderer Name. Manchmal können Probleme mit SQL Express auftreten wenn Sie versuchen, eine Datenbank mit demselben Namen ein zweites Mal zu erstellen. Es gibt eine Möglichkeit, dies mithilfe von SQL Server Management Studio zu beheben, es ist jedoch Im Allgemeinen ist es einfacher, einen anderen Datenbanknamen zu verwenden.

Edit Diese Antwort wurde akzeptiert, da sie Fehler und die vom OP verwendete Umgehung bestätigt (Umbenennen der Datenbank könnte Hilfe) Ich stimme völlig zu, dass das Umbenennen der Datenbank nicht wirklich akzeptabel ist und das Problem nicht vollständig löst. Leider habe ich nicht nach den anderen Möglichkeiten gesucht, um das Problem in SSMS wirklich zu lösen.

50
Chris

Ich denke, für SQL Server Local Db sollten Sie die Initial Catalog-Eigenschaft nicht verwenden. __ 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 Anfangskatalog nicht unterstützt wird (oder nicht gut unterstützt wird und ich einige merkwürdige Fehler habe).

108
Davide Icardi
  1. Von der Package Manager Console aus ausführen:

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0

  2. Führen Sie Ihr Projekt aus

  3. Einen Benutzer registrieren
31
Mask

Entfernen Sie diese Zeile aus der Verbindungszeichenfolge, die dies tun soll;) "AttachDbFilename = | DataDirectory | whateverurdatabasenameis-xxxxxxxxxx.mdf"

15
Ahmad Moussa

"Kann die Datei 'C:\Github\TestService\TestService\App_data\TestService.mdf" nicht als Datenbank' TestService 'anhängen. "

Wenn Sie die obige Fehlermeldung erhalten, führen Sie bitte die folgenden Schritte aus.

  1. Öffnen Sie den SQL Server Object Explorer
  2. Klicken Sie auf die Schaltfläche Aktualisieren.
  3. Erweitern Sie (localdb)\MSSQLLocalDB (SQL Server 12.x.xxxxx - xxxxx\xxxx)
  4. Erweitern Sie die Datenbank
  5. Bitte entfernen Sie eine vorhandene Namensdatenbank
  6. Klicken Sie mit der rechten Maustaste und löschen Sie dann
  7. Gehen Sie zurück zur Package Manage Console
  8. Datenbank auf den neusten Stand bringen
6
YTKim

Ich bin mit dem gleichen Problem konfrontiert ... Die folgenden Schritte in VS 2013 haben das Problem für mich gelöst:

  1. Fügen Sie im Server-Explorer eine neue Verbindung zur Datenbank hinzu
  2. Wählen Sie als Datenquelle Microsoft SQL Server-Datenbankdatei aus
  3. Wählen Sie den Dateinamen der Datenbank entsprechend der Verbindungszeichenfolge in Ihrer web.config
  4. Neue Datenbankdatei wurde erstellt und zwei Datenbankverbindungen wurden im Server-Explorer angezeigt: "MyDatabaseName" und "MyDatabaseName (MyProjectName)"
  5. Eine Verbindung löschen (ich habe "MyDatabaseName" gelöscht) 
5
CI Apps

Sie haben bereits eine alte Kopie dieser Datenbank im Server-Explorer installiert. Es ist also eine einfache Namenskollision im Server Object Explorer/SQL Server. Wahrscheinlich haben Sie denselben Katalogkatalognamen bereits erstellt, bevor Sie ihn in den Ordner Apps_Data verschieben wollten. Der Datenbankname ist also bereits vorhanden und muss nur gelöscht werden.

Gehen Sie einfach zu Visual Studio> Ansicht> SQL Server-Objekt-Explorer und löschen Sie den alten Datenbanknamen und seine Verbindung. Versuchen Sie es erneut, und Sie sollten die .mdf-Datei in App_Data installieren und die gleiche Datenbank erneut im Server-Explorer erstellen.

2
Stokely

Entfernen Sie per @ davide-icardi den "Anfangskatalog = xxx;" In web.config können Sie jedoch auch nach Ihrer Azure-Publizitätsprofildatei suchen, um sie auch hier zu entfernen: 
[Pfad für YourAspNetProject]\Eigenschaften\PublishProfiles [YourAspNetProjectName] .pubxml

<PublishDatabaseSettings>
  <Objects xmlns="">
    <ObjectGroup Name="YourAspNetProjectName" Order="1" Enabled="True">
      <Destination Path="Data Source=AzureDataBaseServer;Initial Catalog=azureDatabase_db;User [email protected];Password=test" />
      <Object Type="DbCodeFirst">
        <Source Path="DBMigration" DbContext="YourAspNetProjectName.Models.ApplicationDbContext, YourAspNetProjectName" MigrationConfiguration="YourAspNetProjectName.Migrations.Configuration, YourAspNetProjectName" Origin="Configuration" />
      </Object>
    </ObjectGroup>
  </Objects>
</PublishDatabaseSettings>
1
OzBob

Ändern Sie einfach den Datenbanknamen aus web.config auf Projektebene file und aktualisieren Sie die Datenbank.

connectionString = Datenquelle = (LocalDb)\MSSQLLocalDB; AttachDbFilename = "| DataDirectory |\aspnet-Projektname-2018041307050 6 . mdf"; Anfangskatalog = "aspnet - 2018041307050 6 ";Integriert

Ändern Sie die fette Ziffer in eine andere Zahl:

connectionString = Datenquelle == (LocalDb)\MSSQLLocalDB; AttachDbFilename = "| DataDirectory |\aspnet-Projektname-2018041307050 7 . mdf"; Anfangskatalog = "aspnet - 2018041307050 7 ";Integriert

1
SHUJAT MUNAWAR

So beheben Sie das Problem 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: passiert, weil Sie die Sicherungsdateien .mdf, ldf gelöscht haben, ohne die Datenbank in der laufenden Instanz von SqlLocalDb zu löschen; Das erneute Ausführen des Codes in VS ist nicht hilfreich, da Sie eine Datenbank mit demselben Namen nicht erneut erstellen können (und deshalb das Umbenennen funktioniert. Der alte Name der Phantom-Datenbank bleibt jedoch erhalten).

The Fix: Ich benutze VS2012, übernehme dies für eine andere Version.

Navigieren Sie zum Pfad unter dem Pfad und geben Sie ein

c:\Programme\Microsoft SQL Server\110\Tools\Binn> sqllocaldb-Informationen

Über cmd werden die Instanznamen angezeigt, einschließlich 'v11.0'.

Wenn die Instanz bereits läuft, geben Sie an der Eingabeaufforderung ein

sqllocaldb info v11.0

Beachten Sie die folgenden Informationen Besitzer: IhrPCName\Benutzername, State: läuft, Instanzpipe-Name: np: \.\Pipe\LOCALDB # 12345678\tsql\query, Dabei ist 123456789 eine zufällige alphanumerische Zahl

Wenn State nicht läuft oder angehalten ist, starten Sie die Instanz mit 

sqllocaldb start v11.0

und extrahiere die gleichen Informationen wie oben.

Geben Sie im SS Management Studio-Dialogfeld "Verbinden" ein

servername: np: \.\pipe\LOCALDB # 12345678\tsql\query

auth: Windows auth

benutzername: (wie Owner, es ist für Win. auth deaktiviert.)

Suchen Sie nach dem Herstellen der Verbindung die Phantom-DB, die Sie gelöscht haben (beispielsweise sollte YourDB.mdf eine Datenbank mit dem Namen YourDB erstellt haben), und löschen Sie sie wirklich.

Erledigt! Sobald es weg ist, sollte VS EF kein Problem haben, es neu zu erstellen.

1
joedotnot

Ich habe festgestellt, dass das Auskommentieren des zum Initialisieren der Datenbank verwendeten Kontextabschnitts das Problem gelöst hat. Havnt hatte noch Zeit, um herauszufinden, was mit den Aussaataussagen nicht stimmte, aber das Entfernen der Aussaat löste das Problem.

1
Steven

Ist auf dieses Problem gestoßen. Verursacht in meinem Fall durch das Löschen der .mdf, während iispexress noch lief und daher immer noch die DB verwendet. Klicken Sie mit der rechten Maustaste auf "iisexpress" in der Taskleiste und klicken Sie auf "Beenden", DANN löschen Sie das "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" und wählen Sie "Neues Element hinzufügen"> "SQL Server-Datenbank". Name: [Verwenden Sie den durch den Datenbankaktualisierungsfehler angegebenen Datenbanknamen.] Klicken Sie auf Hinzufügen.

1
Rick Drayson

Beim Befolgen des Lernprogramms "Erste Schritte mit ASP.NET MVC 5 | Microsoft Docs" trat der gleiche Fehler auf. Ich war in Visual Studio 2015. Ich öffnete View-> SQL Server Object Explorer und löschte die nach dem Tutorial benannte Datenbank. Dann konnte es funktionieren. siehe Löschen einer .mdf-Datei aus app_data führt dazu, dass die Datei ausnahmsweise nicht als Datenbank angehängt werden kann

1
David

In das ähnliche Problem geriet nicht genau das Gleiche. Ein Fall von Database war bereits vorhanden. 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" />

0
Sumanstm21

Ich hatte den gleichen Fehler ... Eine seltsame Sache war, ich hatte ein neues Projekt-Scratch, dort hat es perfekt funktioniert und ein anderes, viel größeres Projekt, bei dem ich immer auf diese Fehlermeldung gestoßen bin.

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 verwendet es

DropCreateDatabaseIfModelChanges

Es gibt nur einen Fall, in dem es Probleme gibt: WENN die MDF-Datei automatisch erstellt wird und Sie die MDF- und Protokolldatei löschen. Dann ging es darum. Verabschieden Sie sich von Ihrer Autokreation ...

Der einzige Weg, den ich finden konnte, war wie erwähnt:

sqllocaldb stop v11.0 & sqllocaldb delete v11.0

Danach ist alles wieder normal (und alle anderen Datenbanken, die von LocalDB behandelt werden, sind ebenfalls weg!).

EDIT: Das war nicht wahr. Ich habe es gerade ausprobiert und die v11.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 diesen Fehler auch erhalten, wenn etwas anderes falsch war. Ich empfehle Ihnen, wenn Sie sicherstellen möchten, dass Ihr DB-Setup solide und solide ist: Erstellen Sie eine neue Lösung/ein neues Projekt Verwenden Sie die grundlegendsten DB-Befehle (Entität hinzufügen, alle Entitäten anzeigen, alle Entitäten löschen) und prüfen, ob dies funktioniert. 

Wenn ja, liegt das Problem irgendwo im Abgrund von VS2013 config und versioning und nuget and stuff.

WENN NEIN, liegt ein Problem mit Ihrer LocalDB-Installation vor.

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-Fehlerbehebung-Leitfaden-für-Erfahrenheitsrahmen-Verbindungen-Amigrationen.aspx

P.S .: Stoßen Sie mich an, wenn Sie das laufende Beispielprojekt benötigen.

0

Dies ist uns gerade passiert, als dotnet ef database update mit ASP.Net Core 2.1 ausgeführt wurde. Es scheint, als würden relative Pfade mit AttachDbFileName nicht unterstützt. 

System.Data.SqlClient.SqlException (0x80131904): Cannot attach the file '.\OurDbName.mdf' as database 'OurDbName'.

Ich wollte das hier nur für andere Menschen zum Ausdruck bringen, die sich vielleicht damit beschäftigen. Der "Fix" verwendet absolute Pfade.

Siehe auch: https://github.com/aspnet/EntityFrameworkCore/pull/6446

0
John Reilly

Seltsamerweise half mir bei dem gleichen Problem die Änderung von 'zu' v11.0 'im folgenden Abschnitt der Konfiguration.

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
0
Vaibhav

Wenn Sie bereits Migrationen anwenden, kann dies möglicherweise behoben werden.

Wechseln 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 Datenzeichenfolgen sollten mit den ersten Zahlen in Ihren Migrationen übereinstimmen.

0
Crismogram

Erstellen Sie Ihre Datenbank neu. Löschen Sie es nicht und Ihre App sollte weiterhin funktionieren.

0
STLDev

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 immer noch auf. Also musste ich die Datenbank auch aus dem SQL Server Object Explorer löschen. Dann könnte ich problemlos den Befehl 'update-database' ohne Fehler ausführen. Hoffe das hilft. 

0
Foyzul Karim