首页 > 解决方案 > .NET Core 3.1 和 SQL Server hierarchyid - 多个异常

问题描述

我在我的 .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 上托管这个解决方案。

更新

我确实使用Microsoft.Data.SqlClient与 .NET Core 兼容的 2.0。另外,我添加了 then 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 

标签: c#sql-server.net-core.net-core-3.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


推荐阅读