Как обновить существующую отключенную организацию

entity-framework-core

Вопрос

У меня есть этот код, который работает в EntityFrameworkCore.

public void SaveProject(Project item)
    {
        var existing = _context.Projects.FirstOrDefault(a => a.Id == item.Id);
        existing.Description = item.Description;
        existing.IsArchived = item.IsArchived;
        existing.IsDeleted = item.IsDeleted;
        existing.Name = item.Name;
        _context.SaveChanges();

    }

Он принимает отключенный объект, находя его в базе данных и применяя изменения.

Есть лучший способ сделать это?

Я бы не позвонил в базу данных. Другими словами, я хотел бы иметь возможность отметить объект как измененный, а затем вызвать SaveChanges ().

Есть ли способ сделать это?

Принятый ответ

Если вы уверены, что элемент существует в базе данных, вы можете использовать метод Attach для DbContext как следующий

public void SaveProject(Project item)
{
    _context.Projects.Attach(item);
    _context.Entity(item).State=EntityState.Modified;
    _context.SaveChanges();
}

Популярные ответы

В ядре EntityFramework теперь это можно сделать с помощью метода Update:

 DbContext.Update<Item>(item);
 this.SaveChanges();

В версии 2.1 метод Update теперь может использоваться как для новых, так и для существующих объектов, если свойство Id автоматически генерируется.

Документы

Недостатком этого является то, что все свойства отмечены как измененные, даже если они одинаковы. Проблема в том, что если вы регистрируете изменения в триггере базы данных, то каждое свойство будет помечено как измененное, даже если оно не является. Если вы хотите, чтобы определенные свойства обновлялись, вам необходимо получить сущность из базы данных, обновить по своему усмотрению, а затем сохранить.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему