显然我还不太了解EF。在SO的某人建议我不应该在我的应用程序的生命周期中保持上下文对象打开,所以我稍微改变了一些事情,现在这里是它当前的工作方式:
ObservableCollection(Of MyEntity)
。在应用程序退出或保存按钮时,我尝试将更改提交回数据库,但显然不能。这是提交代码。
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,所以我希望它能自动生成一个临时密钥(就像旧的DataSet一样)。
我们如何在EF中的“断开连接”模式下工作?
答案 0 :(得分:0)
自己找到它。修改状态的代码是正确的。对于新对象,它应该是这样的:
If entity.EntityState = EntityState.Added OrElse entity.EntityState = EntityState.Detached Then
context.FilmTypes.AddObject(entity)
无需指定关键参数。 EF会照顾它。