我在Visual Studio中使用实体框架创建了一个本地数据库。但我无法让它发挥作用。我得到了#34;基础提供商在Open上失败了。"
我尝试过使用数据库和绝对路径的相对路径,但它无法正常工作。
项目是MVC,数据库是项目中的另一个解决方案。 (DataAccess>逻辑< 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."}"
我在MVC中的web.config:
<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="data source=(LocalDB)\v11.0;attachdbfilename=~D:\Visual Studio Projects\Esport\Esport.Domain\Context\Database\esportDatabase.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
DataAccess图层中的我的App.Config:
<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="data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\Context\Database\esportDatabase.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
编辑:我将项目移动到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 :(得分:0)
我发现使用基于代码的EF配置更容易使用。
要完全控制连接字符串的内容,可以为DbContext派生类创建一个特殊的构造函数,它接受一个连接字符串参数,然后在每次实例化DbContext类时使用带有连接字符串的构造函数
EF模板将DbContext派生类生成为部分类,这意味着您可以从自动生成的代码中添加此构造函数。
这里有充分说明: http://www.programmersranch.com/2013/11/c-ef-setting-connection-strings-at.html
仅供参考,您可以像这样操纵DataDirectory,但是您应该注意它如何影响应用程序的其他部分:
string AppDomainDataDirectory
{
get
{
object obj = AppDomain.CurrentDomain.GetData("DataDirectory");
return obj != null ? obj.ToString() : "";
}
set
{
AppDomain.CurrentDomain.SetData("DataDirectory", value);
}
}