Entity framework EF6迁移(LocalDb)更新数据库登录失败

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

VS 2013 MVC5代码第一个项目

我正在学习ASP.NET教程,以了解最新的更改,但我在迁移方面遇到了问题。 在第一个模块中,使用数据库初始值设定项创建数据库:

<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": "*"
      }`