首先在代码中使用ObservableCollection跟踪DbContext的更改

时间:2012-04-10 08:29:11

标签: wpf mvvm commit change-tracking

我正在使用ObservableCollection<T>将某些数据绑定到某个视图。 在我编辑数据库现有数据时,我可以通过在我的视图模型中只调用一个Savechanges()方法来保存数据编辑,也可以将新项目添加到集合中,我可以编辑它们,但是SaveChanges()方法不会向db添加其他行。

我不知道哪些实体传递给viewmodel。 T是多个实体的合并类,所以我必须这样做。 在构造函数中:

collection=globalContext.TSet;
//the collection and context are defined in class level

获取新项目的代码:

collection.Add(New T());
CurrentItem=collection.Last();

其中collection是ObservableCollection<T>CurrentItem是当前正在编辑的项目。

修改 context.ChangeTracker.Entries无法识别新对象。

我有一个复杂的类型(比如T),这是一些连接查询的结果,我不知道T是从哪些实体创建的,所以我无法获得Entity =&gt;我不能说我想要添加什么类型的实体的上下文。

所以我必须强制更改跟踪器从复杂类型创建新对象,这是某些连接查询的结果。

我正在使用EF4.3.1

有什么建议吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

数据库未获得更新。通过IDbSet修改视图(或视图模型)中的DBSets,然后发出DbContext.SaveChanges执行此操作而不是直接修改ObservableCollection。然后,ObservableCollection应刷新自身并更新视图模型和视图。如果它没有重新查询数据库以生成新的DbSet,那么从DbSet.Local获取一个新的ObservableCollection用于视图模型,然后从中创建一个新视图。

答案 1 :(得分:0)

您还没有将新实体添加到TSet。您需要调用TSet.Add(t)或挂钩ObservableCollection的CollectionChanged事件来自动执行。