【发布时间】: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