所以显然我还不够了解EF。SO 的某人建议我不应该在我的应用程序的生命周期内保持上下文对象打开,所以我稍微改变了一些东西,现在它是如何工作的:
- 我使用 EF 从数据库中读取所需数据并将其存储在
ObservableCollection(Of MyEntity)
. - 应用程序不断向该集合添加新对象,修改/删除 ObservableCollection 中的现有对象。
在应用程序退出或保存按钮时,我尝试将更改提交回数据库,但显然不能。这是提交代码。
For Each entity In MyObservableCollection If entity.EntityState = EntityState.Added OrElse entity.EntityState = EntityState.Detached Then Dim key = context.CreateEntityKey(entitySetName, entity) entity.EntityKey = key context.FilmTypes.Attach(entity) ElseIf entity.EntityState = System.Data.EntityState.Modified Then Dim originalItem As Object = Nothing Dim key = context.CreateEntityKey(entitySetName, entity) If context.TryGetObjectByKey(key, originalItem) Then context.ApplyCurrentValues(key.EntitySetName, entity) End If End If Next context.SaveChanges(SaveOptions.AcceptAllChangesAfterSave)
EF 告诉我已经有一个具有相同键的对象。我的 PK 列在模型中定义为 Identity,所以我希望它自动生成一个临时密钥(就像旧的好 DataSets 一样)。
我们究竟如何在 EF 中的“断开连接”模式下工作?