【问题标题】:vs 2017 entity core 2 not using the right data directoryvs 2017 实体核心 2 未使用正确的数据目录
【发布时间】:2017-11-19 03:47:09
【问题描述】:

在我的任何其他机器上遇到了一个我还没有看到的奇怪问题。这是一台全新的笔记本电脑,所以我安装了 VS 2017、SQL Server 2017 express,然后使用其中一个股票 .net 核心项目(身份验证存储在“应用内”)创建了一个快速示例项目。当然,这会创建一些基本的实体迁移和数据库上下文。

当我运行时,我收到拒绝访问错误。所以,当然,我检查了 SQL 服务默认用户,即管理员。然后我运行基本的迁移命令并收到这个

所以,当然,我的下一步是仔细检查 SQL 的默认数据位置,因为它似乎试图将其存储在 C:\Users root 中?!在安装过程中我从来不用费心去碰这个,但值得一看。当然,它们与我预期的一样,位于 C:\Program Files\ 等的默认位置

此时要尝试的东西很快就用完了 - 考虑到这是一个全新的 Windows 10 安装,与 2017 和 SQL Express 2017 相比,这感觉很像一个错误。如果您要使用个人帐户进入文件 -> 新项目 -> .NET Core Web 应用程序,那么一切都是默认设置。

有人有什么值得尝试的想法或事情吗?为什么它试图将我的数据库存储在 C:\Users 中?连接字符串 -

"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-WebApplication3-53bc9b9d-9d6a-45d4-8429-2a2761773502;Trusted_Connection=True;MultipleActiveResultSets=true"

谢谢! -马克

【问题讨论】:

  • 你的电脑名是什么??

标签: sql-server entity-framework asp.net-core


【解决方案1】:

没有使用 SQL Server Express

本地字符串为(localdb),这是在用户空间中运行的SQL Server 引擎。这是一个很大的区别。通常 SQL Server 或 SQL Server express 作为服务运行。 (localdb) 不是 localhost(环回地址)的别名。它是在用户空间中运行的 SQL Server 的缩小版本的特殊名称。

当 SQL Server 作为服务运行时,它需要对其写入的文件夹具有读/写权限。当文件位于用户文件夹中时,通常不是这种情况

另一方面,LocalDB 总是在您开始调试应用程序时启动,并以用户的权限运行。因此,如果您的文件是由管理员用户或在目录之外创建的,则您具有写入权限。

此外,当您将数据库挂载到 SQL Server (Express) 时,文件会受到保护,不会对其他应用程序进行写访问,因此 LocalDB 也无法打开它。

LocalDB 专为开发而设计,可提供大部分 SQL Server 功能,但无需所有硬设置和在后台永久运行的服务。

基本上你有两个选择:

  1. 按照@TanvirArjel 的建议使用 SQL Server 连接字符串

  2. 从 SQL Server express 中分离数据库,将其复制到您的用户文件夹 (C:\Users\<myusername>\),然后更正它的路径

    那么它应该可以工作了。

请注意,LocalDB 不适合在生产环境中运行,因此您在尝试在 IIS 中运行它时可能会遇到问题(IIS Express 和控制台应用程序以及 WPF 工作正常)。

LocalDb 无法与 IIS 一起使用的原因是 IIS 中的 ASP.NET (Core) 应用程序使用特殊用户运行,但 LocalDb 始终是在用户配置文件文件夹中创建的。现在,IIS 使用的帐户没有配置文件,无法创建数据库,也无法访问外部的任何数据库(因为 localDbs 存储在用户文件夹中,只有创建它的用户可以访问它)。

这里有一些关于它的来源及其背后的原因。 Using LocalDb with IIS

【讨论】:

    【解决方案2】:

    把连接字符串写成如下。希望能成功...

    "DefaultConnection": "Server=YourPcName\\SQLExpressInstanceName;Database=aspnet-WebApplication3-53bc9b9d-9d6a-45d4-8429-2a2761773502;Trusted_Connection=True;MultipleActiveResultSets=true"
    

    【讨论】:

    • 由于大多数人没有内置的差异查看器,最好解释你的答案而不是只显示代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多