首先在EF代码中加载集合关系

时间:2012-10-15 12:55:52

标签: c# .net entity-framework ef-code-first code-first

我在c#

中首先使用实体​​框架代码4.3

我得到了以下课程:

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

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

从A到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 个答案:

答案 0 :(得分: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();
    }

}