2014-04-06 207 views
1

我有一個奇怪的問題,我有大量的實體,我有CRMSvcUtil生成的XrmSchema.cs在我的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 

閱讀

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

老實說,你需要仔細檢查我的(int)投,因爲它可能並不需要 - 我只是沒有在我面前的代碼來驗證。

+0

是的,你在比較一個EntityReference到一個Guid,但通常你甚至不應該在這時編譯 – Draiden

+0

在某些情況下,開發者有責任與Dynamics CRM LINQ提供者進行類型兼容。我收到很多無法執行的編譯查詢。我相信大多數LINQ提供者都是基於'object == object'函數的,並且直到運行時纔會檢查cast(ability)。由於'EntityReference'不能與'Guid'進行比較,'int'不能與'OptionSetValue'進行比較,所以你會得到一個'InvalidCastExeception'。這就是爲什麼我建議所有開發人員的代碼查詢(無論是LINQ,FetchXml還是QueryExpression)在簡化單元測試的獨立類中。 – Nicknow