Lazy Loading和多个引用

本文关键字:引用 Loading Lazy | 更新日期: 2023-09-27 18:00:08

My Database是用Entity表设置的,该表具有Ref_Type导航属性(以及引用TypeID的FK)。"类型"表具有Ref_Department,相同的FK设置。最后,Department表具有Ref_Locale和相同的FK设置。

我将实体保存在列表中,列表是singleton的属性。其创建方式如下:;

private Singleton()
{
    using (Database db = new Database())
    {
        List<Entities> EntityList = db.Entities.ToList<Entities>();
    }
}

这很好,导航属性都已加载,我可以访问其中的任何一个。当我按照如下方式更新实体条目时,问题就出现了;

public void UpdateEntity(Entities oldEnt, Entities newEnt)
{
    using (Database db = new Database())
    {
        Entities ent = db.Entities.Where(e => e.EntityName == oldEnt.EntityName).FirstOrDefault();
        ent.EntityName = newEnt.EntityName;
        ent.EntityEmail = newEnt.EntityEmail;
        ...
        ent.EntityType_ID = newEnt.EntityType_ID;
        db.SaveChanges();
    }
    RefreshEntities();
}
public void RefreshEntities()
{
    using (Database db = new Database())
    {
        db.Configuration.LazyLoadingEnabled = false;
        db.SaveChanges();
        EntityList = db.Entities.Include("Ref_EntityType").Include("Ref_EntityPosition").ToList<Entities>();
    }
}

Ref_Entity被正确加载,但在Ref_Entiity中,Ref_Department只是null。我试过像在构造函数中那样只使用db.Entities.ToList<Entities>();,没有骰子。正如您所看到的,我还尝试过关闭LazyLoading(我想我可能需要调用SaveChanges()才能真正应用该标志)。我也尝试过.Include("Ref_Department"),但它只是抱怨实体不存在它,这是有道理的。

我传递给UpdateEntity方法的newEnt没有初始化Ref_Type,我的工作假设是UpdateEntity中任何未更改的内容都将保持不变。。。

所以现在我有点不知所措,不知道发生了什么以及如何修复它。如果有人能帮助解释我哪里出了问题,或者给我一些关于如何修复代码以使其正常工作的建议,那就太好了。

Lazy Loading和多个引用

一时兴起,我将RefreshEntities()修改为;

EntityList = db.Entities.Include("Ref_EntityPosition").Include("Ref_EntityType").
    Include("Ref_EntityType.Ref_Department").
    Include("Ref_EntityType.Ref_Department.Ref_Locale").ToList<Entities>();

现在我得到了所有的推荐信。

我仍然不确定为什么它会加载构造函数中的所有引用,而不是RefreshEntities()方法中的引用,即使调用是相同的,但这解决了问题,所以我很乐意这样做。