【问题标题】:Losing reference to child object on query在查询中丢失对子对象的引用
【发布时间】:2012-10-30 09:41:35
【问题描述】:

我有 3 个实体(MasterDoc、Folder、User),我在另一个实体(Folder_User)中链接在一起。

public class Folder_User
{
    public int Id { get; set; }
    public MasterDoc MasterDoc { get; set; }
    public User User { get; set; }
    public Folder Folder { get; set; }
}

在我将 Folder_User 类型的对象插入数据库后,我可以(在同一个 DbContext 上)查询它并检索子对象。

public static List<Folder_User> GetAllFolder_USer(User user, DataModel dbContext)
    {
        List<Folder_User> list = null;

        var query = from f in dbContext.Folder_User
                     where f.User.Id == user.Id
                     select f;

        list = new List<Folder_User>(query);
        return list;
    }

但是在页面刷新(新的 dbcontext)之后,当我运行相同的查询时,对 MasterDoc 的对象引用为空。

*我已经尝试过延迟加载,但似乎没有任何解决方法。 *还检查了数据库,并且该表正确包含具有 MasterDoc Id 的行。

【问题讨论】:

  • 每次调用 Method 时尝试使用 Using(debcontext = new DataModel)
  • 添加 ToList() 不确定由于 LINQ 延迟执行对 dbContext 的影响。
  • 即 list = query.ToList() 触发执行,正如 Philip Barnes 指出的,因为这里的查询是 IQuerable 类型,可能是由于执行延迟。

标签: c# asp.net .net entity-framework linq-to-sql


【解决方案1】:

您需要在查询中Include MasterDoc

public static List<Folder_User> GetAllFolder_USer(User user, DataModel dbContext)
{
    var query = dbContext.Folder_User.
                          Include(f => f.MasterDoc).
                          Where(f => f.User.Id == user.Id);

    return query.ToList();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    相关资源
    最近更新 更多