如何解决.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 举报,一经查实,本站将立刻删除。