В EF Core DbContext метод присоединения не работает

Я использую EF Core 2.2.4у меня есть следующая сущность

public partial class Person: IBaseEntity
{
    [Key]
    public int PersonID{ get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public DateTime CreatedDateTime { get; set; }
    public DateTime ModifiedDateTime { get; set; }
    public byte[] VersionStamp { get; set; }
}

Затем в сервисном методе я изменяю только определенные свойства Entity

 public async Tak Update()
 {
    var p= new Person();
    task.FirstName = "Foo";

   _dbContext.Attach<Person>(p);
   _dbContext.SaveChanges();
 }

Если я не ошибаюсь, метод Attach используется, когда объект не отслеживается, и вы хотите изменить только определенные свойства.

Однако приведенный выше код ничего не делает. Когда я запускаю SqlProfiler, я не вижу, чтобы какой-либо sql выполнялся в SaveChanges()

Нужно ли явно указывать EF, что свойство изменено? Что-то вроде

_dbContext.Entry<Person>(p).Property(p => p.FirstName).IsModified = true;

person LP13    schedule 06.06.2019    source источник
comment
Вам нужно иметь значение идентификатора, чтобы вносить какие-либо изменения в базу данных с использованием ядра инфраструктуры сущностей, пожалуйста, проверьте это: stackoverflow.com/questions/46657813/   -  person H. Herzl    schedule 07.06.2019


Ответы (1)


Метод Attach используется, когда у вас есть целый экземпляр сущности, но он не отслеживается. После присоединения сущности она отслеживается, и EF Core предполагает, что ее содержимое соответствует текущему состоянию базы данных. Это обеспечивает это без затрат на загрузку из базы данных. Метод Attach делает это, устанавливая для объекта State значение Unchanged. Таким образом, ваш вызов

_dbContext.SaveChanges();

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

Вы можете использовать другую функцию

var entity = new MyEntity();
context.Update(entity);
person Ahmet Arslan    schedule 07.06.2019