Dapper Read SqlHierachyId Column (SQL Server 2008 R2)

.net c# dapper sql-server

Question

J'essaie de lire une base de données SQL Server 2008 R2 contenant des colonnes du type SQL Server hierarchyid (aka SqlHierachyId ).

Je veux utiliser cette classe avec Dapper:

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

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

(Remarque pour le test, vous devez référencer Program Files (x86)\Microsoft SQL Server\110\Shared\Microsoft.SqlServer.Types.dll pour pouvoir utiliser SqlHierarchyId)

Si je lance ceci, j'obtiens une exception DataException: Error parsing column x (Path=/1/2/3/ - Object) 1/2/3 Error parsing column x (Path=/1/2/3/ - Object)

J'ai essayé d'ajouter un ITypeMap via et de définir des points d'arrêt sur toutes les méthodes d'interface pour voir quelles valeurs sont transmises - mais il n'est jamais appelé.

Des suggestions sur la façon dont Dapper peut me laisser spécifier un mappeur personnalisé? (Sinon, s'il y a une extension qui supporte tous les types Sql, ce serait bien aussi)

Réponse acceptée

Dapper 1.34 prend en charge SqlHierarchyId dans la bibliothèque principale; il devrait maintenant juste fonctionner.


Réponse populaire

Dapper prend en charge SqlHierarchyId, mais vous obtiendrez quand même l'exception si vous utilisez le dernier package Microsoft.SqlServer.Types Nuget. Pour que cela fonctionne, ajoutez ceci à votre web.config ou 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>


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi