实体框架不会延迟加载复杂类型

时间:2013-08-22 14:52:22

标签: c# entity-framework lazy-loading

我在实体框架中有延迟加载的问题。我有一些成员,他们定期检查,所以以下(简化)模型:

public class Member
{
    public int memberId { get; set; }
    public string name{ get; set; }
}

class CheckIn
{
    public int checkInId { get; set; }
    public virtual Member member { get; set; }
    public DateTime timestamp { get; set; }
}

并在上下文中:

public DbSet<Member> leden { get; set; }
public DbSet<CheckIn> checkins { get; set; }

所以我验证了在数据库中填充了成员属性(它包含memberId)。

然而,当我试图获得所有签到时:

IQueryable<CheckIn> Checkins = db.checkins;

它收集所有签到,但无处不在,成员属性为null。 我试过设置

db.Configuration.LazyLoadingEnabled= true;

但这没有帮助。任何人都知道为什么这不起作用?

2 个答案:

答案 0 :(得分:0)

不可能延迟加载复杂类型:
请注意,当加载保存complex type的实体实例时,EF始终会立即初始化complex object的属性值。 EF不支持复杂类型的延迟加载(如果您希望对实体的标量属性进行延迟加载,则也存在相同的限制)。当我们必须处理可能较大的值时(例如,地址复杂类型上的byte[]类型的属性已被映射到Users表上的VARBINARY列并保存图像,这是不方便的。地址描述的位置。)。

Information Source

答案 1 :(得分:-1)

您需要使用virtual关键字进行延迟加载。在你的模型中:

class CheckIn {
    public virtual Member member { get; set; }
}