在基于ASP.NET Core(以前的ASP.NET 5),.NET Core CLR RC1,EF Core(以前的EF 7),启用EF Migrations,LocalDb v11.0的Web项目中使用VS2015。如何在ASP.NET Core中设置正确的AttachDbFilename相对路径?
我手动(通过SQL命令)创建的数据库,并放置MDF/LDF文件项目中的子目录,类似的情况:
MySolution\src\MyProject\MyLocalData\
- MyLocalDb.mdf
- MyLocalDb_log.ldf
这是"ConnectionString"
密钥集的在appsettings.json
的值(或在至少,在众多的一个我想):
"Data Source=(LocalDb)\\v11.0;AttachDbFilename=.\\MyLocalData\\MyLocalDb.mdf;Integrated Security=True"
初始迁移已正确创建,现在我被困在dnx ef database update
命令(见official tutorial),这给了这个错误:
Error Number:15350,State:1,Class:14 An attempt to attach an auto-named database for file .\MyLocalData\MyLocalDb.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.
我敢肯定,有没有其他数据库使用该名称,在我的用户主目录已经检查了这两个文件,并在SQL Server Management Studio中对LocalDB实例数据库。事实上,如果我切换到AttachDbFilename
中的绝对文件路径,迁移将进一步移动(并通过EF流畅接口查找与列属性相关的其他错误,但这是另一回事)。
所以它在我看来这是所有的问题找到合适的相对路径使用AttachDbFilename
。我在SO搜索相关主题,但找不到任何答案。我也尝试更改相对路径,想象当前的文件夹是wwwroot
或artifacts
文件夹,但没有运气。
有没有人知道如何正确设置? TA
感谢您的详尽解答。我已经放弃了将开发数据库文件本地化到项目中的想法,并将其转移到“标准”情况下让他们在堆栈决定的位置(我的用户文件夹)创建它们。无论如何,我们正在迁移(以及developmnet中的数据种子),所以我们可以轻松地从头开始重新创建相同的数据库和数据。 – superjos
注意:我没有在实践中尝试过,但自1.0 RTM'project.json'提供了一个'publishOptions'字段,其中包含一个嵌套的'include'字段,您可以在其中列出相对路径/球体到应该是文件和文件夹发布时考虑。也许尝试使用''publishOptions':{“include”:[“App_Data”,“wwwroot”,“Views”,“appsettings.json”,“web.config”]} – superjos
谢谢@superjos for“ :“我现在已经尝试过了(将自定义文件夹添加到'project.json')并且工作正常。我已更新该帖子。部署到网络服务器已经工作,但没有与localdb - 我不得不去常规的SQL Server与附加数据库。使用部署的主要发现是安装ASP.NET Core 1.0 webserver软件包后需要完全重新启动Web服务器。 – iafilm