2012-10-15 19 views
1

進出口使用實體框架代碼第4.3在C#預先加載集合關係第一

我得到了以下類別:

Class A 
{ 
public string Name { get; set; } 
public List<B> Bs { get; set; } 
} 

Class B 
{ 
public string Name { get; set; } 
} 

有一個從一個多赫志到B. 當我嘗試從A中加載B列表。我只從列表中獲取第一個元素。

當我執行下面的代碼時,我期望a2包含兩個b,但實際上它只包含一個。有人能幫助發現問題嗎?

B b = new B() {Name = "b"}; 
A a = new A() {Name = "a", 
Bs = new List<B>() { new B() {Name = "b1"}, new B() {Name = "b2"} }; 

using (var context = new MyContext()) 
{ 
context.As.Add(a); 
context.SaveChanges(); 
} 
using (var context = new MyContext()) 
{ 
var a2 = (from a in context.As.Include(a => a.Bs) 
     where a.Name == "a" 
     select a).Single(); 
} 

感謝

回答

1

您可以發佈您的實際代碼 - 您發佈的代碼不編譯,但也有一些小的變化能夠對您有所支架和變量的命名它 - 但我得到不同的結果如你所期望的那樣,a2包含B的兩個,所以問題可能在其他地方。這是整個控制檯應用程序:

public class A 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public List<B> Bs { get; set; } 
} 

public class B 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

public class Model : DbContext 
{ 
    public DbSet<A> As { get; set; } 
    public DbSet<B> Bs { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var b = new B() { Name = "b" }; 
     var a1 = new A() 
      { 
       Name = "a", 
       Bs = new List<B>() { new B() { Name = "b1" }, new B() { Name = "b2" } } 
      }; 

     using (var context = new Model()) 
     { 
      context.As.Add(a1); 
      context.SaveChanges(); 
     } 
     using (var context = new Model()) 
     { 
      var a2 = (from a in context.As.Include(a => a.Bs) 
         where a.Name == "a" 
         select a).Single(); 

      Console.WriteLine(a2.Bs.Count); 
     } 

     Console.ReadLine(); 
    } 

} 
+0

使用您的代碼(工作得很好),我設法瞭解問題是我的類實現不可比較嚴重(比較器是越野車)。謝謝。 –