2012-10-15 122 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

使用您的代码(工作得很好),我设法了解问题是我的类实现不可比较严重(比较器是越野车)。谢谢。 –