【发布时间】:2019-12-09 15:35:11
【问题描述】:
我正在开发一个 ASP.NET Core 应用程序,并决定引入具有代码优先迁移的 EF Core。我创建了一个 DbContext 类,并在 Startup 类中注册了它。对于连接字符串,我在 VS2019 中打开了 SQL Server 对象资源管理器,右键单击 (localdb)/MSSQLLocalDB 并从属性窗口复制粘贴连接字符串,如下所示:
Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=master;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False。
包管理器控制台中的 update-database 命令运行良好,没有错误,但是我在生成的 SQL 中找不到任何 CREATE DATABASE 语句。现在我在技术上拥有一个数据库,但我在 SQL Server 对象资源管理器或 SQL Server Management Studio 的任何地方都看不到它。
当我将连接字符串更改为类似 "server=(localdb)\\mssqllocaldb; database=QuizNet;Trusted_Connection=True;MultipleActiveResultSets=true" 的内容时,出现错误:
无法创建文件“C:\Users\ACCOUNT_NAME\QuizNet.mdf”,因为它已经存在。更改文件路径或文件名,然后重试该操作。 创建数据库失败。无法创建列出的某些文件名。检查相关错误。
在将数据库名称更改为即 QuizNet1 后,就像 "server=(localdb)\\mssqllocaldb; database=QuizNet1;Trusted_Connection=True;MultipleActiveResultSets=true" 一样,它确实创建了一个数据库,我可以在 SQL Server 对象资源管理器中看到它。
所以看起来我在第一次尝试时弄乱了连接字符串,EF Core 创建了一个数据库,但我在任何地方都找不到它。
另一个小问题 - EF Core 在调用 update-database 时如何知道连接字符串?连接字符串在 ConfigureServices 方法中设置,据我所知,此方法在运行时调用,而不是在编译时调用。
【问题讨论】:
-
检查 Microsoft SQL Server 的安装文件夹“C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA”,您应该会看到 QuizNet 的 .mdf 和 .ldf 文件。删除它们,您的数据库和日志将被删除。
标签: c# sql-server entity-framework asp.net-core