1

我的数据库设置了一个Entity表,它具有Ref_Type导航属性(以及一个引用TypeID的FK)。类型表,有一个Ref_Department,相同的FK设置。最后,部门表有一个Ref_Locale和相同的FK设置。延迟加载和多个引用

我将实体保存在一个列表中,这是一个单身人士的财产。它创建如下;

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_Entity,Ref_Department只是空。我试过在我的构造函数中使用db.Entities.ToList<Entities>();,没有骰子。正如你所看到的,我也尝试过关闭LazyLoading(我想我可能需要调用SaveChanges()来实际应用该标志)。我也尝试过。包括(“Ref_Department”),但它只是抱怨它不存在的实体,这是有道理的。

的纽恩特,我传递给UpdateEntity方法没有Ref_Type初始化,我的假设是什么在UpdateEntity方法没有改变只会保持不变下工作......

所以我现在对于发生了什么事以及如何解决这个问题有点不知所措。如果有人能够帮助解释我出错的地方,或者给我一些关于如何修复我的代码以使其工作的指示,那会很好。

+0

您是否在RefreshEntities()方法中启用延迟加载时获取它 – 2013-02-20 04:14:10

+0

默认情况下,延迟加载处于打开状态......但是,我刚刚找到了解决方案并将很快发布。 – Trent 2013-02-20 06:38:08

回答

1

一时兴起,我修改了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()方法中,即使这些调用是相同的,但这样可以解决问题,所以我很高兴能够像这样解决问题。

+1

请注意,您可以使用[System.Data.Entity的扩展方法](http://msdn.microsoft.com/zh-cn/library/gg671236%28v=vs.103%29.aspx):'db.Entities 。包括(e => e.NavigationProperty).Include(e => e.NavigationProperty)' – abatishchev 2013-02-20 06:46:18

+0

哦!优秀!谢谢 :) – Trent 2013-02-20 08:16:42