使用SqlHierarchId会使用Dapper抛出System.InvalidCastException

时间:2017-12-24 09:46:44

标签: .net dapper hierarchyid

我想在我的.net项目中使用SqlHierarchId但是当我尝试从DB读取SqlHierarchId时,会发生System.InvalidCastException。我已经编写了一个简单的代码,可以在下面的链接中访问,以显示这个问题:

SqlHierarchyIdTest

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

Microsoft.SqlServer.Types

1 个答案:

答案 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