2017-12-24 15 views
1

내 .net 프로젝트에서 SqlHierarchId를 사용하려고하지만 DB에서 SqlHierarchId를 읽으려고하면 System.InvalidCastException이 발생합니다. 나는이 문제를 보여주기 위해, 그것은 우는 소리 링크에 액세스 할 수있는 간단한 코드를 작성했습니다 : 나는 코드를 추적하고 QueryImpl<T>SqlMappe R 클래스에 도달SqlHierarchId를 사용하여 Dapper로 System.InvalidCastException을 throw합니다.

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의 두 가지 유형에 직면합니다! 더 높은 버전이 설치되어 있거나 컴퓨터에서 참조하는 일 동안 하나의 참조가의 단정 한 라이브러리와 함께 제공됩니다 것처럼

Microsoft.SqlServer.Types

+0

연결을 무엇

는 최신 버전을 사용하는 모든 어셈블리에게 전화 Microsoft.SqlServer.Types을 강제로 당신의 app.config 파일이 추가 시도 wrt와 같은 문자열 모양 'TypeSystemVersion' https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnectionstringbuilder.typesystemversion(v=vs.110).aspx –

+0

@ ta.speot.is가 작동하지 않습니다. – Fred

답변

0

는 것 같습니다. 어셈블리

<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