代码之家  ›  专栏  ›  技术社区  ›  Jack Ukleja

使用foreach而不是select时EntitySet不正确

  •  0
  • Jack Ukleja  · 技术社区  · 14 年前

    我有一个非常基本的数据库模式,并从中创建了一个dbml。两个表以一对多的方式关联(A) 1-*(B)。。。因此,每个A都得到一个名为“BSet”的EntitySet。

    如果我这样做了:

    foreach (var a in db.A)
    {
      Console.WriteLine(a.Name);
      foreach (var b in a.BSet)
      {
         Console.WriteLine(b.Number);
      }
    }
    

    我发现它为每个A打印出相同的B。如果我调试L2S SQL日志,我可以看到它每次调用BSet时都在创建正确的SQL。尽管如此,它为每个A打印相同的Bs集。

    前面有什么坏了?我通常是相当不错的LINQs的微妙之处,但这一个是困惑我!

    2 回复  |  直到 14 年前
        1
  •  0
  •   Joe Albahari    14 年前

    你的密码很好。很可能是类型化DataContext中的关联属性的设置方式有问题。检查设计器中的关联是否指向每个表中的右列。

    另一方面,您的代码效率低下,因为每次内部循环迭代都会往返于数据库。通过将其作为单个LINQ查询编写,可以避免这种往返:

    var query =
      from a in db.A
      from b in a.BSet
      select b.Number;
    
    foreach (var item in query) Console.WriteLine (item);
    
        2
  •  0
  •   Jack Ukleja    14 年前

    我已经为我创建的字段添加了一个主键 相信 是主键,但实际上不是。