Entity Framework无法延迟加载复杂类型。

4

我在 Entity Framework 中遇到了懒加载的问题。我有一些成员经常检查,所以以下(简化后的)模型如下:

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; }

所以我验证了数据库中成员属性已经填充(其中包含成员ID)。

然而,当我尝试获取所有签到记录时:

IQueryable<CheckIn> Checkins = db.checkins;

它收集了所有的签到记录,但是每个记录的成员属性都为空。我尝试进行设置。

db.Configuration.LazyLoadingEnabled= true;

但是这并没有帮助。有人知道为什么这不起作用吗?


1
你如何配置地图? - cuongle
你是什么意思?由于这是1...1成员资格,我应该应用什么样的映射呢? - Marcovannoord
我真的不知道我必须使用流畅的API,因为如果我使用一对多关系,它也可以工作,所以我认为它会“自动工作”。 - Marcovannoord
流畅的 API - cuongle
很遗憾不是这样的!我也不知道是什么原因导致的... - Marcovannoord
显示剩余3条评论
2个回答

0

复杂类型的惰性加载不可行:
请注意,EF总是立即初始化复杂类型的属性值,当包含复杂对象的实体实例被加载时。EF不支持复杂类型的惰性加载(如果您想为实体的标量属性启用惰性加载,则也存在相同的限制)。当我们必须处理潜在的大型值时(例如,Address复杂类型上的byte[]类型的属性,它已映射到Users表上的VARBINARY列,并保存了由Address描述的位置的图像),这是不方便的。

信息来源


请查看此链接:http://weblogs.asp.net/manavi/associations-in-ef-4-1-code-first-part-4-table-splitting表拆分和复杂类型的延迟加载 - Eldho

-1

您需要在懒加载时使用virtual关键字。在您的模型中:

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

一个解释 为什么 很好,这样他(和其他读者)就能理解为什么这是必要的。 - user2674389
啊,我的问题表述可能不够清晰,我已经尝试过了,但是似乎没有什么帮助,很遗憾... - Marcovannoord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接