0

所以显然我还不够了解EF。SO 的某人建议我不应该在我的应用程序的生命周期内保持上下文对象打开,所以我稍微改变了一些东西,现在它是如何工作的:

  1. 我使用 EF 从数据库中读取所需数据并将其存储在ObservableCollection(Of MyEntity).
  2. 应用程序不断向该集合添加新对象,修改/删除 ObservableCollection 中的现有对象。
  3. 在应用程序退出或保存按钮时,我尝试将更改提交回数据库,但显然不能。这是提交代码。

    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 中的“断开连接”模式下工作?

4

1 回答 1

0

自己找到的。修改状态的代码是正确的。对于新对象,它应该是这样的:

If entity.EntityState = EntityState.Added OrElse entity.EntityState = EntityState.Detached Then
    context.FilmTypes.AddObject(entity)

无需指定关键参数。EF 会处理的。

于 2013-03-24T07:03:56.460 回答