实体框架核心:如何获得导航的最后提交关系状态。属性

时间:2017-06-12 07:31:54

标签: c# entity-framework .net-core entity-framework-core

我们假设有一个模型

class Item{
   public int Id {get; set;}
}

class ItemHolder{
   public int Id {get; set;}
   ICollection<Item> Items {get; set;}
}

我们假设我们有这样的代码:

var holder = new ItemHolder{Id = 123}
holder.Items.Add(new Item{Id=2});
holder.Items.Add(new Item{Id=5});
holder.Items.Add(new Item{Id=8});
db.Save(holder)
db.SaveContext();

之后,在其他一些范围内,我们更改此导航属性,如:

var holder = db.Holders.Single(i => i.Id = 123) // no navigation property load
holder.Items.Add(new Item{Id=3});
holder.Items.Add(new Item{Id=5});
holder.Items.Add(new Item{Id=7});

现在我想加载以前保存的项目以进行检查 - 项目中仍存在哪些项目,新添加的项目,删除了哪些项目。我尝试使用

显式加载
db.Entry(holder).Collection(h => h.Items).Load()

但它只是将以前保存的项目添加到holder.Items而没有重复和任何清算,因此之后不再可能了解之前保存了哪些项目,以及在当前交易期间添加了哪些项目。但我需要知道手动设置实体的状态,比如它们之前是否已保存,但当前项目中不存在 - 而不是State.Deleted,如果它之前已保存且仍处于当前状态 - 它是{ {1}},如果它们之前没有保存,但存在于当前 - 它是State.Unmodified

来自示例:2,8 - 已删除,5 - unmodif,3,7 - 已添加<​​/ em>

所以我的问题是从当前包含的State.Added字段获取独立状态的先前保存的项holder.Items的集合。如何实现?

0 个答案:

没有答案