【问题标题】:Including foreign keys in lazy loading在延迟加载中包含外键
【发布时间】:2013-08-11 20:22:30
【问题描述】:

所以我刚刚使用 virtual 关键字将我的外键属性更改为延迟加载。

在我的实体 SupportTicket 中,我得到了对 UserProfile 的外键引用:

[Required]
public virtual UserProfile Owner { get; set; }

我的 Find 方法如下所示:

public static SupportTicket Find(int id)
{
    using (DatabaseContext db = new DatabaseContext())
    {
        SupportTicket ticket = db.SupportTickets.SingleOrDefault(x => x.Id == id);
        return ticket;
    }
}

我的问题是,每当我从 Find 方法获得 SupportTicket 时,我都无法访问 SupportTicket 的 UserProfile,因为我在数据库上下文之外。

我以前没有使用过延迟加载,所以我应该 Include() 实体中的每个外键吗?

【问题讨论】:

  • 是的,延迟加载仅在上下文的生命周期内有效。无论您在其范围之外需要什么数据,都应通过预先加载 (Include) 获取。

标签: c# database entity-framework


【解决方案1】:
public static SupportTicket Find(int id)
{
    using (DatabaseContext db = new DatabaseContext())
    {
        SupportTicket ticket = db.SupportTickets.Include("Owner").SingleOrDefault(x => x.Id == id);
        // or SupportTicket ticket = db.SupportTickets.Include(st => st.Owner).SingleOrDefault(x => x.Id == id);
        return ticket;
    }
}

【讨论】:

    猜你喜欢
    • 2011-11-18
    • 2012-01-29
    • 1970-01-01
    • 2020-05-30
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多