DbSet.Attach,它到底是做什么的?

时间:2011-10-08 12:11:02

标签: entity-framework-4.1 ef-code-first

请按照以下方法:

public class User
{
    [Key]
    public Guid Id { get; set; }
    public string Name { get; set; }
}

public class DataContext : DbContext
{
     DbSet<User> Users { get; set; }
}

public class Repository
{
    DataContext db = new DataContext();

    public User Attach1(User entity)
    {
        var ent = db.Entry<User>(entity);
        ent.State = EntityState.Modified;
        if (db.SaveChanges() > 0)
            return ent.Entity;
        return null;
    }

    public User Attach2(User entity)
    {
        return db.Users.Attach(entity);
    }

}

Attach1Attach2之间有什么区别吗?

1 个答案:

答案 0 :(得分:4)

您的Attach1Attach2方法会执行不同的操作,但您不清楚这些方法的用途。将实体附加到EF时,它将被添加到Unchanged状态的上下文中。如果您在附加后修改实体,那么EF将跟踪这些更改,实体将处于Modified状态。

<强> Attach1

此方法将附加实体并将其标记为已修改。因此,后续SaveChanges()将更新实体的所有属性。建议不要在SaveChanges()方法中调用Attach,因为它不仅仅是附加。

<强> Attach2

此方法会将实体附加为Unchanged