Wie definiere ich DataDirectory für ConnectionString in der Konsolenanwendung, um mit EntityFramework Code First Migrations zusammenzuarbeiten?

Ich versuche, den Standort zu bestimmenMyProject\App_Data\Cos.mdf für die Datenbank inApp.config:

 <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\Cos.mdf;Initial Catalog=Cos;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

ImProgram.cs Ich schrieb

 static void Main(string[] args) {

        string relative = @"..\..\App_Data\Cos.mdf";
        string absolute = Path.GetFullPath(relative);

        AppDomain.CurrentDomain.SetData("DataDirectory", absolute); 
        Console.WriteLine(absolute);
        Console.ReadKey();
 }

Der angezeigte Pfad ist (ich füge ihn ein, um zu zeigen, dass ich keinen Fehler gemacht habe):

aber dann, wenn ich Package Manager Console eintippeenable-migrations VeränderungAutomaticMigrations auf true setzen und @ eingebupdate-database Ich erhalte die Fehlermeldung:

Cannot attach the file 'C:\Users\s8359_000\Documents\Visual Studio 2013\Projects\Projekt5 — kopia\Projekt5\bin\Debug\Cos.mdf' as database 'Cos'.

Warum versucht .NET, meine Datenbank in @ zu erstelleDebug Verzeichnis?! Ich habe 15 Themen auf StackOverflow zu diesem Thema durchgesehen und es sieht so aus, als ob jeder nur die Antworten dupliziert, die nicht funktionieren.

EDIT NACH ANTWORT VON SRUTZKY Ja da hast du recht es liegt fehler vor. Ich habe nach deiner antwort noch ein paar kombinationen versucht, leider hat keine geklappt.

  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\baza.mdf;Initial Catalog=baza;Integrated Security=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

und der Main

  static void Main(string[] args) {

        Console.WriteLine("BEFORE:" + AppDomain.CurrentDomain.GetData("DataDirectory"));
        string relative = @"..\..\App_Data\Cos.mdf";
        string absolute = Path.GetFullPath(relative);
        absolute = Path.GetDirectoryName(@absolute);
        AppDomain.CurrentDomain.SetData("DataDirectory", @absolute);
        Console.WriteLine(@absolute);
        Console.WriteLine(AppDomain.CurrentDomain.GetData("DataDirectory"));
        Console.ReadKey();
}

dann bekomme ich in der Konsole:

und nach dem Löschen vonMigrations Verzeichnis undenable-migrations, automatische Migrationen nach true,update-database Ich bekomme

PM> update-database Geben Sie das Flag '-Verbose' an, um die SQL-Anweisungen anzuzeigen, die auf die Zieldatenbank angewendet werden. System.Data.SqlClient.SqlException (0x80131904): Ein Dateiaktivierungsfehler ist aufgetreten. Der physische Dateiname '\ baza.mdf' ist möglicherweise falsch. Diagnostizieren und korrigieren Sie zusätzliche Fehler und wiederholen Sie den Vorgang. CREATE DATABASE ist fehlgeschlagen. Einige aufgelistete Dateinamen konnten nicht erstellt werden. Überprüfen Sie die zugehörigen Fehler. at System.Data.SqlClient.SqlConnection.OnError (SqlException-Ausnahme, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction) bei System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) bei System.Data.SqlClient.TdsParser.TryRun (RunBehavior runBehavior, SqlCommand CmdHandler, SqlDataReader Datenstrom, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady) bei System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds (String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) bei System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (TaskCompletionSource1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<NonQuery>b__0(DbCommand t, DbCommandInterceptionContext 1 c) bei System.Data.Entity.Infrastructure.Interception.InternalDispatcher1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func 3 Operation, TInterceptionContext interceptionContext, Aktion3 executing, Action 3 ausgeführt) bei System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery (Befehl DbCommand, DbCommandInterceptionContext interceptionContext) bei System.Data.Entity.SqlServer.SqlProviderServices. <> C__DisplayClass1a.b__19 Entity.SqlServer.SqlProviderServices. <> C__DisplayClass33.b__32 () bei System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy. <> C__DisplayClass1.b__0 () bei System.Data.Entity.SqlServer.DefaultS 1 operation) at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation) at System.Data.Entity.SqlServer.SqlProviderServices.UsingConnection(DbConnection sqlConnection, Action 1 act) bei System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection (DbConnection sqlConnection, Action1 act) at System.Data.Entity.SqlServer.SqlProviderServices.CreateDatabaseFromScript(Nullable 1 commandTimeout, DbConnection sqlConnection, String createDatabaseScript) bei System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase (DbConnection-Verbindung, Nullable1 commandTimeout, StoreItemCollection storeItemCollection) at System.Data.Entity.Core.Common.DbProviderServices.CreateDatabase(DbConnection connection, Nullable 1 commandTimeout, StoreItemCollection storeItemCollection) bei System.Data.Entity.Core.Objects.ObjectContext.CreateDatabase () bei System.Data.Entity.Migrations.Utilities.DatabaseCreator.Create (DbConnection-Verbindung) bei System.Data.Entity.Migrations. DbMigrator.EnsureDatabaseExists (Aktion mustSucceedToKeepDatabase) at System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists (Aktion mustSucceedToKeepDatabase) at System.Data.Entity.Migrations.DbMigrator.Update (Zielzeichenfolge) Infrastructure.MigratorBase.Update (String targetMigration) bei System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run () bei System.AppDomain.DoCallBack (CrossAppDomainDelegate callBackDelegate) bei System.AppDomainDelegate (CrossAppDallegat
at System.Data.Entity.Migrations.Design.ToolingFacade.Run (BaseRunner-Runner) bei System.Data.Entity.Migrations.Design.ToolingFacade.Update (String targetMigration, Boolean force) bei System.Data.Entity.Migrations.UpdateDatabaseCommand . <> c__DisplayClass2. <. ctor> b__0 () at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute (Aktionsbefehl) ClientConnectionId: 23ca49c1-4797-4bc3-8f16-f34fd77f2cbe Ein Dateiaktivierungsfehler ist aufgetreten. Der physische Dateiname '\ baza.mdf' ist möglicherweise falsch. Diagnostizieren und korrigieren Sie zusätzliche Fehler und wiederholen Sie den Vorgang. CREATE DATABASE ist fehlgeschlagen. Einige aufgelistete Dateinamen konnten nicht erstellt werden. Überprüfen Sie die zugehörigen Fehler. PM>

Antworten auf die Frage(6)

Ihre Antwort auf die Frage