【发布时间】:2020-11-27 00:39:23
【问题描述】:
在谈到 Universal Windows Platform 如何与本地 SQL Server 数据库连接/管理/交互时,我遇到了困难。我有兴趣移植到UWP 的当前项目(WPF using .NET Framework 4.8)使用EntityFramework 6 和ADO.NET 模型,它就像一个魅力。完全没有问题。另一方面,UWP,我只想说,当连接到SQL Server 的本地实例时,我完全不知道发生了什么。我已经浏览了大约 3-4 个不同的指南/模板,但都没有奏效。我真的很想使用 UWP 并利用 Windows 10 v2004 的所有新功能,但看起来这不会发生。
根据我目前了解的过程,我需要在同一个解决方案中创建两个独立的项目。一个是 UWP 主程序,另一个是面向 .NET Standard 2.0 平台的 .NET Core 类库。我还读到 .NET Core 或 UWP 不支持 EntityFramework 6,所以唯一的方法是使用 EntityFrameworkCore(更具体地说是 NuGet 包 Microsoft.EntityFrameworkCore.SqlServer)。所以我将它安装在 .NET Core 类库上,然后设置从 UWP 应用到类库的引用。因为本地 SQL Server 已经启动并运行,所以我没有采用所谓的“代码优先”方法来创建所有模型/DbContext.cs 文件。根据我的阅读,ONLY 将当前存在的 SQL Server 导入数据模型的方法是使用带有标准连接字符串的 Scaffold-DbContext 命令通过包管理器。令人惊讶的是,这在第一次尝试时就奏效了,模型和 DbContext 都被创建,没有任何问题。
这大约是我似乎能够得到的,因为之后的一切除了抛出异常之外什么都不做。如果我尝试使用 DbContext 传递任何 C# 代码以从数据库中检索任何数据,我会收到大约 10-15 个异常,这些异常基本上表明程序无法找到或连接到数据库。我已经以各种可以想象的方式手动编辑了连接字符串,但似乎没有任何效果。我还尝试使用Microsoft.Data.SqlClient.SqlConnection、Microsoft.Data.SqlClient.SqlConnectionStringBuilder 和System.Data.SqlClient.SqlConnection 手动设置新连接,但它们都失败了,但出现相同的异常。
很抱歉,这篇文章很长,但在这一点上,我真的不知道发生了什么,并且非常感谢大家提供的任何反馈。
更新 1
所以,我回顾了我当前在 .NET Framework 上工作的应用程序,并在 App.config 文件中查找连接字符串,以查看常规 EntityFramework 正在使用什么,它与我以前使用的任何东西完全不同。我的猜测是它正在生成一个完全自定义的连接字符串,其中包括对各种文件的引用和一个名为“ProviderName”的属性。将尝试将此字符串剪切并粘贴到 UWP 中,看看它是否可以工作。
更新 2
我认为我在这方面遗漏了一些基本的东西。我可以毫无问题地使用连接字符串生成脚手架,但如果我尝试在运行时使用相同的连接字符串打开连接,则会出错。
【问题讨论】:
-
您好,根据您的描述,连接字符串似乎有问题。如果您可以显示它会很有帮助(不包括私人数据)。此外,您是否按照this document 中的说明检查了
Enterprise Authentication的功能? -
是的,企业身份验证已检查但没有效果。我觉得奇怪的是,我用于 Scaffold-DbContext 命令的连接字符串在运行时在常规应用程序中不起作用。
-
我一直使用的连接字符串是“Data Source=**ServerName**\\SQLEXPRESS, Initial Catalog = DatabaseName, Integrated Security = True”。我也试过 "Server=**ServerName**, Database = DatabaseName 但这个也没有运气。
-
您好,如果
Enterprise Authentication不适合您,您可以尝试检查privateNetworkClientServer。如果这也无效,您可以尝试将您的 ServerName 替换为本地 URL(例如 127.0.0.1,1443)(需要您的 SqlServer 启用 TCP/IP 访问)。在调试模式下,Visual Studio 将移除 UWP 应用程序的网络环回,以便您可以访问本地网络。但是,在发布时,UWP 应用会限制本地网络环回,这将阻止您访问本地 SqlServer 服务。 -
没有选中 EnterpriseAuthentication 和/或 PrivateNetworkClientServer 选项的骰子。对于踢,我检查了所有功能框并再次测试。每次都收到相同的错误消息:“Message =”Microsoft.Data.SqlClient.SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否已配置..."
标签: sql-server uwp entity-framework-core .net-standard class-library