我正在构建一个WPF应用程序,使用EF Code First。
应用程序似乎工作良好,而调试,但当我发布和安装它,使用ClickOnce,我得到这个错误:
Cannot attach the file [path & filename] as database
我试过:
使用VS Server Explorer
检查我的连接字符串(无法将文件附加为数据库/底层提供程序在打开时失败)
更改连接字符串中DB的名称
从连接字符串中删除
AttachDbFilename
等标签使用sqlcmd注销数据库(http://www.eidias.com/Blog/2013/1/7/error-connecting-to-localdb-after-mdf-and-ldf-files-are-deleted)
删除localdb实例(http://arabic2000.com/blog/index.php/2013/11/localdb-attach-problem-in-visual-studio-2013/)
使用VS' SQL Server Object Explorer删除数据库
简单地省略连接字符串,但然后我得到一个不同的错误:
{"Expansion of |DataDirectory| failed while processing the connection string. Ensure that |DataDirectory| is set to a valid fully-qualified path."}
(然而,在我的代码中没有提到
|DataDirectory|
,除了注释掉的连接字符串)使用
DropCreateDatabaseIfModelChanges
,甚至DropCreateDatabaseAlways
代替CreateDatabaseIfNotExists
在我的家用电脑上,我不得不将应用程序设置为不查找更新,因为我没有网络来放置安装文件夹。当我在这里发布,安装和运行应用程序时,我没有得到任何错误-但所有的应用程序似乎都是在后台运行,直到我杀死它的进程。UI不显示
更新:
同时,我已经删除了数据库使用SQL Server管理工作室,这似乎有一些帮助。
如果我不使用连接字符串,我得到
|DataDirectory|
错误:Expansion of |DataDirectory| failed while processing the connection string. Ensure that |DataDirectory| is set to a valid fully-qualified path.
如果我随后在调试模式下运行应用程序(这使得EF创建DB),然后运行(或重新安装)应用程序,我得到这个错误:
no process at the other end of the pipe
如果我随后删除DB(在上述步骤中调试运行期间创建)使用SQL Server Management Studio,并再次运行安装的应用程序,再次得到
|DataDirectory|
错误。即使我使用连接字符串,指定绝对路径,我得到
|DataDirectory|
错误。如果我随后在调试模式下运行应用程序(这使得EF创建DB),然后运行(或重新安装)应用程序,我再次得到
Cannot Attach the file as database
错误。如果我随后删除DB(在上述步骤中调试运行期间创建)使用SQL Server Management Studio,并再次运行安装的应用程序,再次得到
|DataDirectory|
错误。
更新2:
我让应用程序在我的家庭电脑上工作。只需要……不要使用快捷键ClickOnce添加到开始菜单,而是运行。exe本身。
ClickOnce在安装开始后仍然没有显示任何通知,并且在安装完成后仍然无法启动应用。
我不知道这个"修复"是否会在工作中工作,直到星期二才能尝试它-但我会让你张贴。我确实在那里简单地尝试了一下,并得到了这个错误:
Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies
…但我很可能使用了一个过期的。exe副本,因为我很赶时间。
更新这个答案:i've found a fix:
我的问题似乎是由错误的连接字符串引起的:
<add name="4.Data.DienstreisDBContext" connectionString="Data Source=(LocalDb)v11.0" providerName="System.Data.SqlClient" />
故障在name
标签中。它应该简单地说,"DienstreisDBContext"(从而省略了我存储DBContext类的文件夹的名称)。
我已经找到了一个工作:
如果我忽略安装过程中的错误,并使用。exe而不是开始菜单快捷方式ClickOnce生成,我的应用程序似乎运行良好。
遗憾的是,这意味着更新我的应用程序不会像ClickOnce那样容易。