Как обновить уже отслеженную сущность - PullRequest
0 голосов
/ 30 января 2020

Здравствуйте, у меня следующая проблема:

Я получаю объект, используя EF Core, а затем внутри транзакции я пытаюсь update его. update выдает исключение, если я пытаюсь изменить entity state на MODIFIED ПОСЛЕ , когда я получаю его из базы данных.

Позже я понял, что если я получу сущность из контекст, он уже отслеживается в этот момент, и все дальнейшие обновления не должны подразумевать изменение entity state.

. Исходя из этого предположения в приведенном ниже коде, я прокомментировал изменение состояния. К сожалению, в конец объекта не обновляется. Даже если я позвоню SaveChanges.

public void SomeMethod(DbContext context)
{
   var entity=this.context.Find([some entity]);  // the entity is started to get tracked
   using(var tran=this.context.BeginTransaction())
   {
     try
     {
         //do some modifications on entity
         //  entity.Field1="tt";
         //  entity.Field2="ttx";
         //this.context(entity).State=State.Modified -> throws exception saying entity is already tracked
         this.context.SaveChanges();
         tran.Commit(); //  entity is not updated in the database !
     }catch
     {
        tran.Rollback();
     }
    }
}

PS Кроме того, я также попытался сначала изменить состояние объекта на Detached, а затем Modified .Это по-прежнему вызывает исключение в строке Modified.

Может кто-нибудь сказать мне, как выполнить обновление уже отслеженного объекта?

Обновление I также пытался без транзакции, и все еще отслеживаемый объект не изменяется. Так что это в основном не сохраняет изменения:

var entity=this.context.Find([some entity]);
//do some changes on entity without changing the entity state
this.context.SaveChanges();

Обновление 2 Видимо проблема в обновлениях. Я Я не просто настраиваю поля. Я действительно где-то создаю новую сущность.

1 Ответ

0 голосов
/ 30 января 2020

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

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