[英]EF6 migrations (LocalDb) update-database login failed
VS 2013 MVC5 代码第一个项目。
我正在使用 MVC5教程完成EF6的 ASP.NET 入门,以了解最新的更改,但我遇到了迁移问题。 在第一个模块中,使用数据库初始值设定项创建数据库:
<contexts>
<context type="ContosoUniversity.DAL.SchoolContext, ContosoUniversity">
<databaseInitializer type="ContosoUniversity.DAL.SchoolInitializer, ContosoUniversity" />
</context>
</contexts>
和这个连接字符串:
<connectionStrings>
<add name="SchoolContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=ContosoUniversity1;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
</connectionStrings>
这工作正常。 在 Code First 迁移和部署模块迁移中设置。 初始化程序被注释掉,DB 的名称更改为 ContosoUniversity2:
<connectionStrings>
<add name="SchoolContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=ContosoUniversity2;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
</connectionStrings>
当update-database
从 Packager Manager Console 运行时,它失败并显示错误消息:
Cannot open database "ContosoUniversity2" requested by the login. The login failed.
Login failed for user 'MyMachine\MyUser'.
我已经用相同的用户和相同的结果多次重新运行这两个场景。 如果我将Initial Catalog
更改为AttachDbFilename=|DataDirectory|\\ContosoUniversity2;
update-database
成功(数据库现在位于项目的 App-Data 文件夹中,而不是用户配置文件的根目录中):
<connectionStrings>
<add name="SchoolContext" connectionString="Data Source=(LocalDb)\v11.0; AttachDbFilename=|DataDirectory|\ContosoUniversity2;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
</connectionStrings>
不过,您必须在部署时使用Initial Catalog
。 生产 connectionString 在 Web.Release.Config 中单独设置,以便可行。
问题是为什么需要修复,为什么Initial Catalog
不能在开发端与update-database
一起使用?
更新 1:
问题不在于迁移,而在于 LocalDb
MyUser
在SQLExpress
( sysadmin
) 中拥有完全权限。 我可以登录到SSMS
下MyUser
和全面管理DBs
。 我进行了几次测试。 即使我将教程的初始数据库创建为MyUser
,如果我从头开始重建应用程序并使用databaseInitialzer
它现在会引发登录失败错误。 如果我在Admin
下运行VS
, databaseInitialzer
和update-database
正常工作。 如果我那么复制DBs
从Admin's
用户配置文件根MyUser's
,然后运行VS
,而不是作为Admin
,登录时为MyUser
两个databaseInitialzer
和update-database
,然后工作,如果DB
是现有之前。
如果我将connectionString
更改为AttachDbFileName
并运行databaseInitialzer
和update-database
MyUser
可以在App_Data
文件夹中创建一个DB
,证明MyUser
具有DB
创建权限。 MyUser
显然对其自己的用户配置文件的根拥有完全权限。 LocalDb实现有一些问题。
有没有人对这个问题有任何见解?
如果删除 DB 文件,它仍会在 SqlLocalDB 中保持注册状态。 如果 LocalDb 挂断了无法附加(手动删除数据库文件后)或登录失败,请在此处查看 JSobell 和 CodingwithSpike 的答案:
ef5-cannot-attach-the-file-0-as-database-1 。
从 PM 控制台运行“sqllocaldb.exe stop v11.0”和“sqllocaldb.exe delete v11.0”
更新:
使用 SSMS 更容易。 服务器名称:(本地)\\v11.0,Windows 身份验证。 这确实是管理 localdb 数据库的最佳方式。
我正在使用 VS 2013 和 EF6.1 。
当我使用迁移和删除数据库时,我遇到了类似的错误。 我无法再次重新创建数据库。 发现由于 SQLExpress 本地数据库实例在后台运行并保持已删除的数据库连接而导致的错误。
以下是处理这种情况的步骤。
我将标准安全性更改为可信连接
服务器=myServerAddress;数据库=myDataBase;Trusted_Connection=True;
在 appsetting.json 中,您可以编写此代码
`{
"ConnectionStrings": {
"onlineStoreDB": "Server=.;Database=onlineStore;Trusted_Connection=True"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}`
它对我有用。
从连接字符串交换
数据源=(LocalDb)\\v11.0;
到
服务器=.\\SQLExpress;
这帮助我在迁移过程中使用 Code First 技术
这将解决您的问题,您可以根据需要更新和添加尽可能多的方法和属性到模型
注意:第 1 步{如果您按照教程启动了数据库}
从 PM 控制台:
启用迁移 -ContextTypeName ContosoUniversity.DAL.SchoolContext
add-migration 初始
更新数据库
我有点晚了,但在使用 MVC5 进行 EF6 入门时遇到了同样的问题。
该问题是由于示例中无效的数据库初始化而出现的。
改变
public class SchoolInitializer : System.Data.Entity. DropCreateDatabaseIfModelChanges<SchoolContext>
到
public class SchoolInitializer : CreateDatabaseIfNotExists<SchoolContext>
它将创建没有问题的数据库。
默认情况下,示例中使用的初始化方法不会创建新数据库。 不确定它是否是一个错误。
'PM> enable-migrations Enable-Migrations 已过时。 使用 Add-Migration 开始使用 Migrations。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.