-1

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

我不知道将哪些实体传递给视图模型。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 是从哪些实体创建的,所以我无法获取实体 => 我不能说出我是什么类型的实体的上下文想补充。

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

我正在使用 EF4.3.1

有什么建议么?

谢谢你。

4

2 回答 2

0

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

于 2012-04-17T20:27:35.893 回答
0

您尚未将新实体添加到 TSet。您需要调用 TSet.Add(t) 或连接 ObservableCollection 的 CollectionChanged 事件以自动执行此操作。

于 2013-05-14T06:24:31.993 回答