我有一个非常复杂的数据库的 WCF 层,我使用 LINQ to Entities 读取该数据库。不过,最近出现了一个奇怪的错误。执行查询时我得到空引用,但只是有时(数据库中的数据没有改变)。我在下面描述了两种一般情况,一种或另一种失败。如果我重新启动访问服务的站点以重新初始化连接,则角色会切换。现在另一个案例失败了,而第一个案例有效。所以..我很困惑。有人会想到什么吗?
情况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();
在上述情况下,枚举时language
,a.Lang
为空,方法失败。同样,这只是有时。使用完全相同的输入参数和数据库内容,重新初始化服务连接后查询再次工作。当第一个成功时,第二个案例似乎失败了,反之亦然。另一种情况是这样的:
案例二:
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.Occasion
最后一行为空并导致空引用。同样,这是间歇性的,尽管数据库和参数相同。
我很感激即使是对可能导致这种情况的最轻微的想法......