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



我在 c# 中使用实体框架代码 first 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();
}

谢谢

你能发布你的实际代码吗 - 你发布的代码不会编译,但对你的一些括号和变量命名进行了一些小的更改 - 但我得到的结果与你不同,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();
    }
}

最新更新