繁体   English   中英

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

[英]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

MyUserSQLExpress ( sysadmin ) 中拥有完全权限。 我可以登录到SSMSMyUser和全面管理DBs 我进行了几次测试。 即使我将教程的初始数据库创建为MyUser ,如果我从头开始重建应用程序并使用databaseInitialzer它现在会引发登录失败错误。 如果我在Admin下运行VSdatabaseInitialzerupdate-database正常工作。 如果我那么复制DBsAdmin's用户配置文件根MyUser's ,然后运行VS ,而不是作为Admin ,登录时为MyUser两个databaseInitialzerupdate-database ,然后工作,如果DB是现有之前。

如果我将connectionString更改为AttachDbFileName并运行databaseInitialzerupdate-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 本地数据库实例在后台运行并保持已删除的数据库连接而导致的错误。

以下是处理这种情况的步骤。

  1. 删除数据库文件(.mdf 和 .ldf)文件。
  2. 从您的应用程序中删除迁移文件夹。
  3. 从服务器资源管理器数据连接中删除到该数据库的任何数据库连接。
  4. 转到 windows 命令提示符(如果 VS 2012 或更早版本,您必须使用 VS 命令提示符)。
  5. 运行“sqllocaldb.exe stop v11.0”(这将停止v11.0服务)
  6. 运行“sqllocaldb.exe delete v11.0”(这将删除v11.0服务)
  7. 转到 Visual Studio 中的包管理器控制台。
  8. 运行“Enable-Migrations”(这将创建迁移文件夹和内容)
  9. 运行“Add-Migration init”(这会将更改构建到下一次迁移)
  10. 运行“Update-Database”(这将再次创建数据库)

我将标准安全性更改为可信连接

服务器=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 控制台:

  1. 启用迁移 -ContextTypeName ContosoUniversity.DAL.SchoolContext

  2. add-migration 初始

  3. 更新数据库

我有点晚了,但在使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM