我想在我的.net项目中使用SqlHierarchId但是当我尝试从DB读取SqlHierarchId时,会发生System.InvalidCastException。我已经编写了一个简单的代码,可以在下面的链接中访问,以显示这个问题:
var connection = new SqlConnection("Data Source=.;Initial Catalog=tempdb;Integrated Security=True");
var val = connection.Query<Microsoft.SqlServer.Types.SqlHierarchyId>("select @Path", new {Path = Microsoft.SqlServer.Types.SqlHierarchyId.Parse("/1/2/3/")}).Single();
我跟踪代码并到达QueryImpl<T>
r类中的SqlMappe
。当Dapper尝试将SqlDataReader
读取的值的类型与泛型的类型进行比较时,面对两种类型的SqlHierarchyId
!
答案 0 :(得分:0)
看起来好像一个引用与Dapper库捆绑在一起,而较高版本是您从机器上安装或引用的版本。
尝试将此添加到app.config文件中以强制所有名为Microsoft.SqlServer.Types的程序集使用最新版本:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
<bindingRedirect oldVersion="10.0.0.0" newVersion="14.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
汇编重定向的Microsoft文档:Microsoft Docs - Redirecting Assembly Versions