微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

.NET Core 3.1和SQL Serverarchitectureid-多个异常

如何解决.NET Core 3.1和SQL Serverarchitectureid-多个异常

我在.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 

解决方法

您的错误消息建议您使用使用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

,

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

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

然后将其用作字符串。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。