DbSet.Attach, что именно он делает?

#entity-framework-4.1 #ef-code-first

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

}
  

Есть ли какая-либо разница между Attach1 и Attach2 ?

Комментарии:

1. пожалуйста, отправьте код, который компилирует

2. Смотрите еще раз, не ставьте его, потому что код простой.

3. Я имею в виду, что ваши Attach1 Attach2 методы and синтаксически некорректны / неполны.

Ответ №1:

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

Attach1

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

Attach2

Этот метод прикрепит объект как Unchanged .

Комментарии:

1. Цель состоит в том, чтобы обновить объект. Я использую Attach для обновления свойств в базе данных.