我正在使用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
有什么建议吗?
谢谢。
答案 0 :(得分:0)
数据库未获得更新。通过IDbSet修改视图(或视图模型)中的DBSets,然后发出DbContext.SaveChanges执行此操作而不是直接修改ObservableCollection。然后,ObservableCollection应刷新自身并更新视图模型和视图。如果它没有重新查询数据库以生成新的DbSet,那么从DbSet.Local获取一个新的ObservableCollection用于视图模型,然后从中创建一个新视图。
答案 1 :(得分:0)
您还没有将新实体添加到TSet。您需要调用TSet.Add(t)或挂钩ObservableCollection的CollectionChanged事件来自动执行。