2017-12-24 16 views
1

私の.netプロジェクトでSqlHierarchIdを使用したいが、DBからSqlHierarchIdを読み込もうとすると、System.InvalidCastExceptionが発生する。私は、コードをトレースし、QueryImpl<T>SqlMappeのRクラスに到達SqlHierarchIdを使用するとDapperで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(); 

:私はそれがこの問題を表示するには、怒鳴るリンクでアクセス可能な簡単なコードを書かれています。 Dapperは、SqlDataReaderで読み取られた値のタイプを汎用タイプに比較しようとすると、SqlHierarchyIdの2つのタイプに直面します!

Microsoft.SqlServer.Types

+0

文字列はwrtのように見える'TypeSystemVersion' https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder.typesystemversion(v=vs.110).aspx –

+0

@ ta.speot.isは動作しません – Fred

答えて

0

高いバージョンがあなたのマシンからインストールまたは参照される1つである一方、一つの基準は、Dapperのライブラリにバンドルされているように見えます。

最新バージョンを使用するMicrosoft.SqlServer.Typesと呼ばれるすべてのアセンブリを強制するためにあなたの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="14.0.0.0" /> 
    </dependentAssembly> 
    </assemblyBinding> 
</runtime> 

マイクロソフトドキュメントリダイレクト:あなたの接続を何Microsoft Docs - Redirecting Assembly Versions

関連する問題