2015-02-21 3 views
0

Я создал локальную базу данных в Visual Studio с сущностью. Но я не могу заставить его работать. Я получаю «Недостающий провайдер отказался от Open».Connectionstring в web.config не работает. Даже с абсолютным путем

Я пробовал относительный путь к базе данных и абсолютный путь, но он не будет работать.

Проект MVC, и база данных находится в другом решении проекта. (DataAccess> Logic < MVC)

Ошибка, возникающая при запуске с абсолютным путем. Ошибка то же самое с относительным путем:

"An attempt to attach an auto-named database for file ~D:\\Visual Studio Projects\\Esport\\Esport.Domain\\Context\\Database\\esportDatabase.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share."}"

Мой web.config в MVC:

<connectionStrings> 
<add name="esportDatabaseEntities" connectionString="metadata=res://*/Context.Model.esportDatabaseModel.csdl|res://*/Context.Model.esportDatabaseModel.ssdl|res://*/Context.Model.esportDatabaseModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\v11.0;attachdbfilename=~D:\Visual Studio Projects\Esport\Esport.Domain\Context\Database\esportDatabase.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

Мои App.Config в DataAccess слой:

<connectionStrings> 
    <add name="esportDatabaseEntities" connectionString="metadata=res://*/Context.Model.esportDatabaseModel.csdl|res://*/Context.Model.esportDatabaseModel.ssdl|res://*/Context.Model.esportDatabaseModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\Context\Database\esportDatabase.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
</connectionStrings> 

EDIT: я переместил проект на C: чтобы читать и писать, и теперь он работает с абсолютный путь. Проблема в том, что я не могу запустить его с абсолютным путем. Мне нужно, чтобы он был относительным. Любые идеи, как это сделать? | DataDiretory | указует на App_Data и мою базу данных нет в данном приложении ..

EDIT2: Когда я запускаю относительный путь, | DataDiretory | esportDatabase.mdf Я получаю эту ошибку:

{"An attempt to attach an auto-named database for file C:\\Esport\\Esport\\App_Data\\Context\\Database\\esportDatabase.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share."}

Но база данных не расположен там. Его расположение: C: \ Esport \ Esport.Domain \ Context \ Database \ esportDatabase.mdf.

+0

вы используете DB первая миграция в EF? –

+0

Да. Сначала база данных. –

+0

попробуйте удалить строку соединения с уровня DataAccess? –

ответ

0

Я обнаружил, что с использованием конфигурации на основе кода для EF гораздо проще работать.

Чтобы получить полный контроль над строкой соединения, вы можете создать специальный конструктор для ваших производных классов DbContext, который принимает аргумент строки подключения, а затем использовать свой конструктор со строкой соединения каждый раз, когда вы создаете экземпляр своего DbContext классы.

Шаблоны EF генерируют производные классы DbContext как частичные классы, что означает, что вы можете добавить этот конструктор в сторону от автоматически сгенерированного кода.

Это полностью объясняется здесь: http://www.programmersranch.com/2013/11/c-ef-setting-connection-strings-at.html

FYI, вы можете манипулировать DataDirectory, как это, хотя вы должны быть осторожны, о том, как это может повлиять на другие части вашего приложения:

string AppDomainDataDirectory 
    { 
     get 
     { 
      object obj = AppDomain.CurrentDomain.GetData("DataDirectory"); 
      return obj != null ? obj.ToString() : ""; 
     } 
     set 
     { 
      AppDomain.CurrentDomain.SetData("DataDirectory", value); 
     } 
    }