2012-07-17 23 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