В EF Core DbContext метод присоединения не работает - PullRequest
0 голосов
/ 07 июня 2019

Я использую 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;

1 Ответ

0 голосов
/ 07 июня 2019

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

_dbContext.SaveChanges();

не выполнять ни одного запроса, потому что нет изменений в любой сущности.

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

var entity = new MyEntity();
context.Update(entity);
...