2014-04-06 2 views
1

이상한 문제가 있습니다. 엔티티가 많았으며, CRMSvcUtil에 의해 생성 된 CRMSvcUtil이 내 CRM 시스템에서 생성되었습니다. 특히 쿼리를 사용하고 엔터티로 변환하는 동안 코드의 객체. 이 변환 방법은 하나만 제외하고 모든 엔티티에서 완벽하게 작동했습니다. 계속 System.InvalidCastException : 'Microsoft.Xrm.Sdk.Entity'형식의 개체를 캐스팅 할 수 없습니다.이 하나의 엔터티에 대해 오류가 발생했습니다. 여기를 생성하는 다음 코드 세그먼트는이 toList() 메소드에서 예외가 발생,이다 :MS Dynamics CRM System.InvalidCastException

public List<etel_productcharacteristic> RetrieveCharacteristic(Guid characteristicId) 
     { 
      using (XrmDataContext context = new XrmDataContext(CRMConnection.OrganizationService)) 
      { 
       var query = from characteristic in context.etel_productcharacteristicSet 
          where characteristic.etel_productcharacteristicId == characteristicId && characteristic.statecode.Value == etel_productcharacteristicState.Active 
          select characteristic; 
       return query.ToList(); 


      } 
     } 

는 사람이 코드 문제가 무엇인지 저를 가리킬 수 있습니다. 그런데 인터넷에서 읽은 모든 솔루션은 enableproxy 메서드 사용을 제안합니다. 내 경우에는 조직 서비스가 초기화되는 동안 Enableproxy 메서드가 호출되어 범인처럼 보이지 않습니다. 그리고 다른 모든 변환 작업은 내 플러그인에서 잘 작동합니다. 거기에 뭔가 잘못되었습니다.

+1

Id로 'etel_productcharacteristic'의 단일 레코드를 검색하려고 이미 시도 했습니까? 또한 문제가 생성 된 XrmSchema에 있는지 확인하기 위해 후기 바인딩 쿼리를 시도합니다. – Filburt

+0

후기 바인딩 쿼리가 작동하지 않지만 단일 레코드를 검색하면 도움이되었습니다. 제안 해 주셔서 감사합니다. –

답변

2
당신이 줄을 변경해야

:

where characteristic.etel_productcharacteristicId == characteristicId && characteristic.statecode.Value == etel_productcharacteristicState.Active 

그것이 필요하지 않을 수 있습니다 당신은 (int) 캐스트에 나에게 한 번 확인해야합니다, 솔직히

where characteristic.etel_productcharacteristicId.Id == characteristicId && characteristic.statecode.Value == (int)etel_productcharacteristicState.Active 

를 읽기 - 나는 검증 할 코드가 없다.

+0

예, EntityReference를 Guid와 비교하지만 일반적으로이 시점에서 컴파일 할 수 없습니다. – Draiden

+0

개발자가 경우에 따라 Dynamics CRM LINQ 공급자와의 형식 호환성을 담당해야합니다. 컴파일 할 수없는 많은 쿼리가 실행되었습니다. 나는 대부분의 LINQ 제공자가'object == object' 함수를 기반으로하고 있으며 캐스트 (능력)가 런타임까지 검사되지 않는다고 생각합니다. 'EntityReference'는'Guid'와 비교 될 수 없으며'int'는'OptionSetValue'와 비교 될 수 없으므로'InvalidCastExeception'을 얻습니다. 따라서 모든 개발자가 단위 테스트를 단순화하는 독립 실행 형 클래스에서 코드 쿼리 (LINQ, FetchXml 또는 QueryExpression)를 사용하는 것이 좋습니다. – Nicknow