2012-07-17 61 views
0

我以爲我發現我的問題的解決方案時,我發現this,但它不適用於我。WCF項目不會返回數據與64位Win Vista和VS2010

當我在調試模式下運行,我WcfTestClient沒有獲取任何數據和我收到的錯誤:

A first chance exception of type 'System.NotSupportedException' occurred in System.Data.Entity.dll 
The thread '<No Name>' (0x1b50) has exited with code 0 (0x0). 
The program '[7040] WCFTestClient.exe: Managed (v4.0.30319)' has exited with code 0 (0x0)..................................... 

究竟會檢索數據是下面的方法:

public List<WShortDeal> Test() 
    { 
     try 
     { 
      return entities.ProductInstance_Deal 
       .Select(d => new WShortDeal() 
       { 
        Id = d.Deal.Id 
        // , 
        // Name = d.Deal.Deal_Language.SingleOrDefault(l => l.Language.Id == 1).Name** 
        , 
        NewPrice = (double)d.ProductInstance.Price * (1 - d.Deal.SalesPercentage/100) 
        , 
        OldPrice = (double)d.ProductInstance.Price 
        , 
        Valuta = d.ProductInstance.Valuta.ValutaCode 
        , 
        Type = d.Deal.Type 
        , 
        IdCompanyAccount = d.ProductInstance.IdCompanyAccount 
       }) 
        .ToList(); 
     } 
     catch (Exception) 
     { 
      return null; 
     } 
    } 

如果我取消但是現在註釋掉的兩行代碼我停止接收數據,並在我的輸出窗口中收到上面提到的錯誤消息。

另外,如果我這一行

,ProductCategory = d.ProductInstance.ProductType.ProductCategory.ProductCategory_Language.Where(pcl => pcl.IdLanguage == idLanguage).Single().Name 

,而不是線

, Name = d.Deal.Deal_Language.SingleOrDefault(l => l.Language.Id == 1).Name 

添加到我原來的SELECT語句,它也不會返回任何數據。所以我想也許它與所有代表與我的Language-table(??)的多對多關係的表有關。因爲每當我忘記與「ProductCategory_Language」表的連接時,我都可以再次檢索數據。

有人可以幫忙嗎?我的問題還有其他解決方案嗎?我一直在努力解決這個問題,現在天:( 在此先感謝。

+0

通過它的外觀它不似乎是一個WCF問題'System.NotSupportedException'發生在System.Data.Entity.dll中...這可能表明您的數據模型存在問題您的模型是否與數據庫同步 也嘗試重構Deal_Language選擇部分到一個單獨的實用工具方法。這樣它會幫助你更好地調試。 – CSharpenter 2012-07-17 09:54:28

+0

@ CSharpenter感謝您的反應;我會試一試...........我一直在努力用我的模型同步,這是真的!我會讓你知道的。問:我如何「將Deal_Language選擇部分重構爲單獨的實用方法」? – Angel 2012-07-17 22:48:36

+0

私人字符串ExtractLanguageName(DealEntityType deal,int langID)//用Deal的實際類型替換DealEntityType {var deal_Lang = deal.Deal_Language.SingleOrDefault(l => l.Language.Id == langID); if(deal_Lang!= null){return deal_Lang.Name; } return string.Empty; //或拋出異常,或其他動作} – CSharpenter 2012-07-18 09:15:03

回答

0

如果行選擇在名稱前返回空? 嘗試

Name = d.Deal.Deal_Language.Where(l => l.Language.Id == 1) 
     .Select(s=>s.Name).SingleOrDefault() 
+0

感謝您的支持答案,但沒有區別.... – Angel 2012-07-17 22:46:03