WCF LINQ查询间歇性失败,lambda表达式中引用为null

WCF LINQ查询间歇性失败,lambda表达式中引用为null,wcf,linq,linq-to-entities,wcf-data-services,odata,Wcf,Linq,Linq To Entities,Wcf Data Services,Odata,我有一个WCF层到一个非常复杂的数据库,我使用LINQ读取到实体。不过,最近出现了一个奇怪的错误。我在执行查询时得到空引用,但只是有时(数据库中的数据没有改变)。我有下面描述的两个一般情况,一个失败,另一个失败。如果我重新启动访问服务的站点,以便重新初始化连接,则会切换角色。现在,另一个案例失败了,而第一个成功了。所以我很困惑。有人想到什么了吗 案例1: string code = "xxx"; int version = 1; Language lang = Language.en; var

我有一个WCF层到一个非常复杂的数据库,我使用LINQ读取到实体。不过,最近出现了一个奇怪的错误。我在执行查询时得到空引用,但只是有时(数据库中的数据没有改变)。我有下面描述的两个一般情况,一个失败,另一个失败。如果我重新启动访问服务的站点,以便重新初始化连接,则会切换角色。现在,另一个案例失败了,而第一个成功了。所以我很困惑。有人想到什么了吗

案例1:

string code = "xxx";
int version = 1;
Language lang = Language.en;

var languages = this.uc.MainTable
  .Expand(a => a.Program.Area)
  .Expand(a => a.Plang)
  .Expand(a => a.Lang)
  .Where(a => 
    a.Program.Code.Equals(code, StringComparison.OrdinalIgnoreCase) 
    && a.Lang != null
    && a.Program.Version == version)
  .ToList();

var language = languages.Where(a => a.Lang.LangID == (int)lang).SingleOrDefault();
在上述情况下,枚举
语言
时,
a.Lang
为空,该方法失败。同样,这只是有时。使用完全相同的输入参数和数据库内容,在重新初始化服务连接后,查询将再次工作。当第一个案例成功时,第二个案例似乎失败了,反之亦然。另一种情况是:

案例2:

Language lang = Language.en;

var programs = this.uc.SomeTable
  .Expand(a => a.Program)
  .Expand(a => a.Plang)
  .Expand(a => a.Program.Level)
  .Where(a =>
    a.Program.Version == 1
    && a.LangID == (int)lang
    && a.Program.Occasion.Any(b => b.StatusID != 3));

programs = programs.Where(a => a.Program.Occasion.Any(b => b.Date == "2010-01-01"));
当枚举
programs
时,最后一行中的
a.Program.sition
为空并导致空引用。同样,这是间歇性的,尽管数据库和参数相同

我很感激哪怕是最细微的一点想法都可能导致这种情况……

回答如下:

这通常是由DataServiceContext.MergeOption引起的。默认设置意味着客户端在第一次查询后将永远不会更新实体。这意味着即使在查询中展开了其他查询,它们也不会填充导航属性。修复方法是将MergeOption设置为OverwriteChanges。

回答如下:

这通常是由DataServiceContext.MergeOption引起的。默认设置意味着客户端在第一次查询后将永远不会更新实体。这意味着即使在查询中展开了其他查询,它们也不会填充导航属性。修复方法是将MergeOption设置为OverwriteChanges