【问题标题】:Universal Windows Platform (UWP) and SQL Server通用 Windows 平台 (UWP) 和 SQL Server
【发布时间】:2020-11-27 00:39:23
【问题描述】:

在谈到 Universal Windows Platform 如何与本地 SQL Server 数据库连接/管理/交互时,我遇到了困难。我有兴趣移植到UWP 的当前项目(WPF using .NET Framework 4.8)使用EntityFramework 6ADO.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.SqlConnectionMicrosoft.Data.SqlClient.SqlConnectionStringBuilderSystem.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


【解决方案1】:

经过数月的反复试验,终于能够在运行时建立连接。无需过多介绍,这对我有用(假设 EFCore 已经生成了一个 DbContext 文件):

  1. 启用企业身份验证。
  2. 启用与 SQL Server 实例的 TCP/IP 连接。
  3. 在 Visual Studio 的服务器资源管理器中,单击添加连接。如果您已经为数据库保存了连接,请右键单击服务器并单击修改连接
  4. 在连接属性窗口中,单击高级按钮。记下所有列出的参数及其值并保存。
  5. 打开无法连接的数据上下文文件并为 Microsoft.Data.SqlClient 添加 using 语句。现在找到 OnConfiguring 方法。使用 SqlConnectionStringBuilder 并配置之前保存的高级连接属性中的所有参数。

这应该可行。如果仍然有错误,我会仔细检查参数以确保它们都输入正确。

希望这篇文章能帮助其他处理此问题的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-01
    • 2016-10-02
    • 2016-04-25
    • 2015-10-29
    • 2016-07-29
    • 2016-01-09
    • 1970-01-01
    相关资源
    最近更新 更多