DbSet.Attach, что именно он делает? - PullRequest
4 голосов
/ 08 октября 2011

Следуйте приведенным ниже методам:

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);
    }

}

Есть ли разница между Attach1 и Attach2?

1 Ответ

4 голосов
/ 08 октября 2011

Ваши Attach1 и Attach2 методы выполняют разные вещи, и неясно, что вы ожидаете делать в этих методах. Когда вы присоединяете объект к EF, он будет добавлен в контекст в состоянии Unchanged. Если вы измените сущность после присоединения, EF будет отслеживать эти изменения, и сущность будет в состоянии Modified.

Attach1

Этот метод прикрепит объект и пометит его как измененный. Таким образом, последующий SaveChanges() обновит все свойства объекта. Вызывать SaveChanges() внутри метода Attach не рекомендуется, поскольку он делает больше, чем просто присоединение.

Attach2

Этот метод прикрепит сущность как Unchanged.

...