Entity framework EF6迁移(LocalDb)更新数据库登录失败
VS 2013 MVC5代码第一个项目 我正在学习ASP.NET教程,以了解最新的更改,但我在迁移方面遇到了问题。 在第一个模块中,使用数据库初始值设定项创建数据库:Entity framework EF6迁移(LocalDb)更新数据库登录失败,entity-framework,asp.net-mvc-5,entity-framework-migrations,localdb,Entity Framework,Asp.net Mvc 5,Entity Framework Migrations,Localdb,VS 2013 MVC5代码第一个项目 我正在学习ASP.NET教程,以了解最新的更改,但我在迁移方面遇到了问题。 在第一个模块中,使用数据库初始值设定项创建数据库: <contexts> <context type="ContosoUniversity.DAL.SchoolContext, ContosoUniversity"> <databaseInitializer type="ContosoUniversity.DAL.Schoo
<contexts>
<context type="ContosoUniversity.DAL.SchoolContext, ContosoUniversity">
<databaseInitializer type="ContosoUniversity.DAL.SchoolInitializer, ContosoUniversity" />
</context>
</contexts>
我用相同的用户和相同的结果多次重新运行了这两个场景。如果我将Initial Catalog
更改为AttachDbFilename=|DataDirectory | \contosoliversity2
更新数据库
成功(数据库现在位于项目的App Data文件夹中,而不是用户配置文件的根目录中):
MyUser
拥有SQLExpress
(sysadmin
)中的全部权限。我可以在MyUser
下登录SSMS
,并完全管理DBs
。我做了几次测试。尽管我为教程创建了初始数据库,作为MyUser
,但如果我从头开始重新构建应用程序并使用databaseinitializer
,它现在会抛出登录失败错误。如果我在Admin
下运行VS
,databaseinitializer
和updatedatabase
都可以正常工作。如果我随后将DBs
从Admin的
用户配置文件根目录复制到MyUser的
,然后运行VS
,而不是Admin
,同时以MyUser
身份登录databaseinitializer
和更新数据库
,那么如果DB
先前存在,则可以工作
如果我将connectionString
更改为AttachDbFileName
并运行databaseinitializer
和updatedatabase
MyUser
可以在App\u Data
文件夹中创建一个DB
,证明MyUser
具有DB
创建权限MyUser
显然拥有自己用户配置文件根目录的完全权限。实施过程中出现了一些问题
有人对这个问题有什么见解吗?如果删除数据库文件,它仍然在SqlLocalDB中注册。如果LocalDb因无法连接(手动删除DB文件后)或登录失败而挂起,请参阅JSobell和CodingwithSpike的回答:
从PM控制台运行“sqllocaldb.exe stop v11.0”和“sqllocaldb.exe delete v11.0”
更新:
更容易使用SSM。服务器名称:(本地)\v11.0,Windows身份验证。这确实是管理localdb数据库的最佳方法 我正在使用VS 2013和EF6.1
在处理迁移和删除数据库时,我遇到了类似的错误。
我无法重新创建数据库。
发现错误,因为SQLExpress本地数据库实例正在后台运行,并与它保持已删除的数据库连接
以下是处理这种情况的步骤
删除数据库文件(.mdf和.ldf)文件
从应用程序中删除迁移文件夹
从服务器资源管理器数据连接中删除与该数据库的任何数据库连接
转到windows命令提示符(如果VS 2012或更早版本,则必须使用VS命令提示符)
运行“sqllocaldb.exe停止v11.0”(这将停止v11.0服务)
运行“sqllocaldb.exe删除v11.0”(这将删除v11.0服务)
转到Visual studio中的包管理器控制台
运行“启用迁移”(这将创建迁移文件夹和内容)
运行“addmigrationinit”(这将为下一次迁移构建更改框架)
运行“更新数据库”(这将再次创建数据库)
从连接字符串进行交换
数据源=(LocalDb)\v11.0
到
服务器=。\SQLExpress
这对我在迁移过程中使用代码优先技术有所帮助这将解决您的问题,您可以根据需要更新和向模型添加任意多的方法和属性
注意:步骤1{如果您在教程中启动了数据库}
从PM控制台:
启用迁移-ContextTypeName ContosoUniversity.DAL.SchoolContext
添加迁移初始值
更新数据库
我有点晚了,但我在工作中遇到了同样的问题
出现此问题的原因是示例中的数据库初始化无效
改变
public class SchoolInitializer : System.Data.Entity. DropCreateDatabaseIfModelChanges<SchoolContext>
公共类初始值设定项:System.Data.Entity。DropCreateDatabaseIfModelChanges
到
公共类学校初始值设定项:CreateDatabaseIfNotExists
它将创建没有问题的数据库
默认情况下,示例中使用的初始化方法不会创建新数据库。不确定它是否是一个bug 我将标准安全性更改为可信连接
Server=myserver地址;数据库=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": "*"
}`
它对我很有用。'PM>启用迁移
启用迁移已过时。使用“添加迁移”开始使用迁移。“您有SQL Server Management Studio吗?如果是,请尝试使用windows身份验证连接到这两个数据库。如果可以(没有访问错误),它是与代码相关的。如果不是,则需要更改localdb中的配置设置。在阅读该教程时,我也遇到了相同的错误。在第一个教程/初始步骤中说明,每次运行应用程序时都会重新创建db,并在接下来的步骤中进行更改。对于那些仍处于初始步骤中的用户,您所要做的就是断开服务器资源管理器中的LocalDb,以便能够在Student表中看到新的电子邮件列。但按照上面的@Danil Ivanov的建议也行得通。
Cannot open database "ContosoUniversity2" requested by the login. The login failed.
Login failed for user 'MyMachine\MyUser'.
<connectionStrings>
<add name="SchoolContext" connectionString="Data Source=(LocalDb)\v11.0; AttachDbFilename=|DataDirectory|\ContosoUniversity2;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
</connectionStrings>
public class SchoolInitializer : System.Data.Entity. DropCreateDatabaseIfModelChanges<SchoolContext>
public class SchoolInitializer : CreateDatabaseIfNotExists<SchoolContext>
`{
"ConnectionStrings": {
"onlineStoreDB": "Server=.;Database=onlineStore;Trusted_Connection=True"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}`