我们假设有一个模型
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
的集合。如何实现?