4

我正在尝试从包含 SQL Serverhierarchyid类型(又名SqlHierachyId)列的 SQL Server 2008 R2 数据库中读取。

我想将这个类与 Dapper 一起使用:

public class Foo 
{ 
    public int Id { get; set; }
    public SqlHierarchyId Path { get; set; }
} 

例如:connection.Query<Foo>("select 3 as [Id], hierarchyid::Parse('/1/2/3/') as [Path]");

(注意测试,你需要参考 Program Files (x86)\Microsoft SQL Server\110\Shared\Microsoft.SqlServer.Types.dll才能使用SqlHierarchyId)

如果我运行它,我会得到一个 DataException 异常:Error parsing column x (Path=/1/2/3/ - Object)

我尝试通过添加一个 ITypeMap 并在所有接口方法上设置断点以查看它传递了哪些值 - 但它永远不会被调用。

关于如何让 Dapper 让我指定自定义映射器的任何建议?(或者,如果有支持所有 Sql 类型的扩展,那也很好)

4

2 回答 2

3

Dapper 1.34SqlHierarchyId在核心库中支持;它现在应该可以工作了。

于 2014-08-28T09:08:03.950 回答
3

Dapper 确实支持 SqlHierarchyId 但如果您使用最新的Microsoft.SqlServer.TypesNuget 包,您仍然会收到异常。要使其正常工作,请将其添加到您的 web.config 或 app.config:

<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="11.0.0.0" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>
于 2015-05-28T03:23:06.100 回答