在实体框架4中保存断开连接的对象

时间:2010-11-23 11:32:20

标签: entity-framework entity-framework-4

在EF1中,我不能只更新在ObjectContext范围之外构造的对象(具有正确的id)。

EF4有新方法吗?

我可以将它添加到上下文(context.AddOrder(order))(其中context是我的ObjectContext的一个实例),并且'它'看到它有一个id并更新它吗?

这是非poco,所以我的对象来自EntityObject

3 个答案:

答案 0 :(得分:5)

如果它是一个全新的对象,那么您应该使用ObjectContext.AddObject ObjectSet.AddObject:
AddObject 方法用于添加在数据库中存在 not 的新创建对象。该实体将获得一个自动生成的临时 EntityKey 及其 EntityState将设置为 Added

另一方面, ObjectContext.Attach ObjectSet.Attach用于数据库中已经 存在 的实体。而不是将EntityState设置为Added,将结果附加到 Unchanged EntityState中,这意味着它已附加到上下文后没有更改。假设您附加的对象存在于数据库中。

有关此主题的更详细讨论,请查看此帖子:
Entity Framework 4 - AddObject vs Attach

答案 1 :(得分:2)

请改用Attach method。它专为断开连接的对象而设计。

答案 2 :(得分:1)

Employee Info Starter Kit获取,您可以将代码段视为如下:

public void UpdateEmployee(Employee updatedEmployee)
        {
            //attaching and making ready for parsistance
            if (updatedEmployee.EntityState == EntityState.Detached)
                _DatabaseContext.Employees.Attach(updatedEmployee);
            _DatabaseContext.ObjectStateManager.ChangeObjectState(updatedEmployee, System.Data.EntityState.Modified);
            _DatabaseContext.SaveChanges();
        }