Как определить DataDirectory для ConnectionString в консольном приложении для работы с EntityFramework Code First Migrations

Я пытаюсь установить местоположениеMyProject\App_Data\Cos.mdf для базы данных вApp.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>

ВProgram.cs Я написал:

 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();
 }

Отображаемый путь (я вставляю его, чтобы показать, что я не ошибся):

но потом, когда я печатаю в консоли диспетчера пакетовenable-migrations менятьAutomaticMigrations в true, затем введитеupdate-database Я получаю ошибку:

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

Почему .NET пытается создать мою базу данных вDebug каталог ?! Я изучил 15 тем в StackOverflow по этой теме, и похоже, что все просто дублируют ответы, которые не работают.

РЕДАКТИРОВАТЬ ПОСЛЕ ОТВЕТА SRUTZKY Да, вы правы, есть ошибка. Я попробовал еще несколько комбинаций после вашего ответа, к сожалению, ни одна из них не сработала.

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

и главное

  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();
}

тогда я получаю в консоли:

и после удаленияMigrations каталог иenable-migrations, автоматическая миграция к истине,update-database Я получил:

PM> update-database Укажите флаг '-Verbose' для просмотра операторов SQL, применяемых к целевой базе данных. System.Data.SqlClient.SqlException (0x80131904): произошла ошибка активации файла. Физическое имя файла '\ baza.mdf' может быть неправильным. Диагностируйте и исправьте дополнительные ошибки и повторите операцию. СОЗДАТЬ БАЗУ ДАННЫХ не удалось. Некоторые имена файлов не могут быть созданы. Проверьте связанные ошибки. в System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое breakConnection, действие1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) при System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj, булева callerHasConnectionLock, булева asyncClose) при System.Data.SqlClient.TdsParser.TryRun (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader DATASTREAM, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady) в System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds (String methodName, логический асинхронный, тайм-аут Int32, логический asyncWrite) в System.Data.SqlClient.SqlCommand.InternalExecuteNonQuerySourceCom1 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, DbCommandInterceptionContext1 в) в System.Data.Entity.Infrastructure.Interception.InternalDispatcher1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func3 операция, TInterceptionContext interceptionContext, Action3 executing, Action3 выполнено) в System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery (команда DbCommand, DbCommandInterceptionContext interceptionContext) в System.Data.Entity.SqlServer.SqlProviderServices. <> C__Disbate_DateBaseEgn1. .SqlServer.1 operation) at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation) at System.Data.Entity.SqlServer.SqlProviderServices.UsingConnection(DbConnection sqlConnection, Action1 акт) в System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection (DbConnection sqlConnection, Действие1 act) at System.Data.Entity.SqlServer.SqlProviderServices.CreateDatabaseFromScript(Nullable1 commandTimeout, DbConnection sqlConnection, String createDatabaseScript) в System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase (соединение DbConnection, допускает Nullable)1 commandTimeout, StoreItemCollection storeItemCollection) at System.Data.Entity.Core.Common.DbProviderServices.CreateDatabase(DbConnection connection, Nullable1 commandTimeout, StoreItemCollection storeItemCollection) в System.Data.Entity.Core.Objects.ObjectContext.CreateDatabase () в System.Data.Entity.Migrations.Utilities.DatabaseCreator.Create (соединение DbConnection) в System.Data.Entity.Migrations.DM .EnsureDatabaseExists (Действие mustSucceedToKeepDatabase) в System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists (Действие mustSucceedToKeepDatabase) в System.Data.Entity.Migrations.DbMigrator.Update (String targetgragration)) .MigratorBase.Update (String targetMigration) в System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.Run () в System.AppDomain.DoCallBack (CrossAppDomainDelegate callBackDelegate) в System.AppDomain.DoeateateDack CrossDDoDateBackDD
в System.Data.Entity.Migrations.Design.ToolingFacade.Run (BaseRunner runner) в System.Data.Entity.Migrations.Design.ToolingFacade.Update (String targetMigration, Boolean force) в System.Data.Entity.Migrations.UpdateDatabaseCommand. <> c__DisplayClass2. <. ctor> b__0 () в System.Data.Entity.Migrations.MigrationsDomainCommand.Execute (команда Action) ClientConnectionId: 23ca49c1-4797-4bc3-8f16-f34fd77f2cbe Произошла ошибка активации файла. Физическое имя файла '\ baza.mdf' может быть неправильным. Диагностируйте и исправьте дополнительные ошибки и повторите операцию. СОЗДАТЬ БАЗУ ДАННЫХ не удалось. Некоторые имена файлов не могут быть созданы. Проверьте связанные ошибки. PM>

Ответы на вопрос(3)

Ваш ответ на вопрос