Здравствуйте, у меня следующая проблема:
Я получаю объект, используя 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 Видимо проблема в обновлениях. Я Я не просто настраиваю поля. Я действительно где-то создаю новую сущность.