将新对象添加到上下文中

时间:2013-03-24 06:26:30

标签: vb.net entity-framework mvvm crud

显然我还不太了解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)
    
  4. EF告诉我已经有一个具有相同密钥的对象。我的PK列在模型中定义为Identity,所以我希望它能自动生成一个临时密钥(就像旧的DataSet一样)。

    我们如何在EF中的“断开连接”模式下工作?

1 个答案:

答案 0 :(得分:0)

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

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

无需指定关键参数。 EF会照顾它。