5

我一直在寻找一段时间,我找不到任何作品。我有两个对象的情况(见下面的定义)。子对象是父对象的集合。我正在使用 WPF/Prism 和 Entity Framework 4.4 在 Visual Studio 2012 中工作

class Parent
{
    ...other properties...
    public virtual ICollection<Child> Children { get; set; }
} 

class Child
{
    public string Value1 { get; set }
    public string Value2 { get; set }
    public string Value3 { get; set }
}

我有一个表单,它的父项加载到左侧的列表框中,用户单击列表中的一项,我们在右侧显示属性。一切都很好,直到我们有两台机器访问同一个数据库。如果一台机器添加或更新其中一条记录,我在第二台机器获取数据时遇到问题......

我有以下代码可以尝试修复它,但似乎在实体框架中应该有一种简单的方法。

DbEntityEntry<Parent> entry = dbContext.Entry(parent);
entry.Reload(); //Note: this refreshes the properties on the Parent object (but not the collection

if (Parent.Children != null)
{
   Array a = doc.Children.ToArray<Child>();  //this is here because they may have deleted one of the records 

   foreach (Child g in a)
   {
       DbEntityEntry<Child> c= dbContext.Entry(g);
       c.Reload();  //Note: if it is deleted, the Parent.Child gets updated automatically to remove the record.
   }
}

entry.Collection(o => o.Children ).Load(); //call this to get new records

我有什么想法我可以做得更好还是这样做的方法??????

4

1 回答 1

12

将此移至答案

找到了一种更好的方法来在数组上执行上面的“foreach”

((IObjectContextAdapter)dbContext).ObjectContext.Refresh(RefreshMode.StoreWins, parent.Children); 

这将删除条目并更新当前条目。仍然需要 .Load() 来获取新记录。这似乎也快了很多

于 2013-08-15T18:37:45.143 回答