【问题标题】:.NET Core 3.1 and SQL Server hierarchyid - multiple exceptions.NET Core 3.1 和 SQL Server hierarchyid - 多个异常
【发布时间】:2020-12-05 09:12:25
【问题描述】:

我在我的 .Net Core 3.1 项目中使用 SQL Server Db,并且一些存储过程和视图具有用于参数和数据的 hierarchyid 类型。

我使用Microsoft.Data.SqlClient 包。当我尝试使用SqlDataReader 读取数据时,我得到了异常:

System.IO.FileNotFoundException:无法加载文件或程序集“Microsoft.SqlServer.Types,版本=10.0.0.0,文化=中性,PublicKeyToken=89845dcd8080cc91”。系统找不到指定的文件。

好的,我尝试按照它的建议使用Microsoft.SqlServer.Types,但这个包不是.NET Standard,它不起作用。

另外,我找到了EntityFrameworkCore.SqlServer.HierarchyId,但是当我使用它时,我得到:

System.InvalidCastException:无法将“Microsoft.SqlServer.Types.SqlHierarchyId”类型的对象转换为“Microsoft.Data.SqlClient.Server.IBinarySerialize”类型。

那么到底如何在 .NET Core 3.1 中使用 HierarchyId 类型?

我打算在 linux 上托管这个解决方案。

更新

我确实使用与 .NET Core 兼容的 Microsoft.Data.SqlClient 2.0。另外,我添加了EntityFrameworkCore.SqlServer.HierarchyId,我得到了这个错误:

System.InvalidCastException:无法将“Microsoft.SqlServer.Types.SqlHierarchyId”类型的对象转换为“Microsoft.Data.SqlClient.Server.IBinarySerialize”类型。

这是 .csproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="EntityFrameworkCore.SqlServer.HierarchyId" Version="1.1.0" />
    <PackageReference Include="Microsoft.Data.SqlClient" Version="2.0.0" />
    <PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
  </ItemGroup>

  <ItemGroup>
    <Folder Include="Helpers\" />
  </ItemGroup>

</Project>

到目前为止没有运气。

更新 2

这是引发异常的代码:

using (SqlDataReader reader = await detailsCmd.ExecuteReaderAsync())
{
  while (reader.Read())
  {
    details.Add(new HierarchyDetails
    {
      Id = reader.GetInt32(0),
      groupPath = reader.GetValue(1).ToString(), // <==== EXCEPTION
      name = reader.GetString(2),
      optionalData = reader.IsDBNull(3) ? null : reader.GetString(3)
    });
  }
}

而且表格只有一行:

id  groupPath   culture name    optionalData
24  0x58        en-US   testing 

【问题讨论】:

  • Microsoft.SqlServer.Types, Version=10.0.0.0 ... 这不是 SQL Server 2008 吗? SQL Server 2008 finished Extended Support in 2019.
  • 请用示例代码更新问题,并在哪里找到此异常。
  • 添加了代码。

标签: c# sql-server .net-core .net-core-3.1


【解决方案1】:

您的错误消息表明您使用了使用 nuget https://www.nuget.org/packages/Microsoft.SqlServer.Types/10.50.1600.1 的东西,即 .NET Framework dll,而不是 .NET Core。

您提到您使用Microsoft.Data.SqlClient,请确保您使用与.NET Core 兼容的https://www.nuget.org/packages/Microsoft.Data.SqlClient/

如有其他错误,请同时查看Entity Framework Core hierarchyid

【讨论】:

    【解决方案2】:

    目前在所有查询中将 hierarchyid 转换为 NVARCHAR 的解决方案:

    ... CAST(groupPath as NVARCHAR(4000)) as groupPath ...
    

    然后将其用作字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 2020-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      相关资源
      最近更新 更多