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)
Dapper 1.34 prend en charge SqlHierarchyId
dans la bibliothèque principale; il devrait maintenant juste fonctionner.
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>