实体框架6 -延迟加载不工作

本文关键字:工作 延迟加载 框架 实体 | 更新日期: 2023-09-27 18:09:52

这是我第一次使用EF因此,我可能错过了防止b类惰性加载的一些简单的东西。当我加载类'B'属性为空。我希望它被填充为持久的。

对于我的例子,我有两个简单的类:
public class AClass
{
    public AClass()
    {
        Id = Guid.NewGuid();
        B = new BClass();
    }
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public Guid Id { get; set; }
    public string Name { get; set; }
    public virtual BClass B { get; set; }
}
public class BClass
{
    public BClass()
    {
        Id = Guid.NewGuid();
    }
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public Guid Id { get; set; }
    public string Description { get; set; }
}

在'Context'类中:

public DbSet<AClass> AClasses { get; set; }
public DbSet<BClass> BClasses { get; set; }
下面是一个简单的测试。我还以为x.B会很忙呢。相反它是空的?
using (var db = new TestContext())
{
    AClass a = new AClass();
    a.Name = "AClass";
    a.B.Description = "BClass Description Goes Here!";
    db.AClasses.Add(a);
    db.SaveChanges(); // Works. Confirmed both a and a.B are persisted to the database
}
using (var db = new TestContext())
{
    AClass x = db.AClasses.Where(a => a.Name == "AClass").FirstOrDefault();
    System.Console.WriteLine(x.Name);
    System.Console.WriteLine(x.B.Description); // x.B is null. Expected it to load and the .Description property to be "BClass Description Goes Here!"
}

更改已正确持久化到数据库。我还不能把截屏贴出来。

From AClass table:

<>之前Id名称B_IdB7937E1B-9CC0-4318-B179-0D54B23B6CDA类560D066B-4848-454D-B92C-F6AE4232057E之前

From BClass table:

<>之前标识描述560D066B-4848-454D-B92C-F6AE4232057E b类描述到这里!之前

实体框架版本:6.0.0.0

实体框架6 -延迟加载不工作

删除B初始化形式的AClass类:

public AClass()
{
    Id = Guid.NewGuid();
    //B = new BClass();
}

初始化导致实体框架认为你给AClass的B属性赋了新值,而没有用代理赋值。