Обновить сущность в ядре ef без запроса, указав альтернативный ключ? - PullRequest
1 голос
/ 24 апреля 2020

Я хочу обновить сущность (не запрашивая ее), просто указав alternateKey. Возможно ли это?

using (var db = GetContext())
using (var transaction = db.Database.BeginTransaction())
{
    // [...]

    var status = new ImportStatus();
    status.ID = 201;  // don't know the real PK. With PK it works!
    status.Symbol = symbol; // this is the alternateKey
    status.DateLastImport = DateTime.Now;

    db.Attach(status);
    db.Entry(status).Property("DateLastImport").IsModified = true;

    await db.SaveChangesAsync(cancellationToken);
    await transaction.CommitAsync(cancellationToken);
}

1 Ответ

0 голосов
/ 24 апреля 2020

Попробуйте использовать DbContext.Entry () , чтобы явно установить состояние, и оно должно работать:

using (var db = GetContext())
using (var transaction = db.Database.BeginTransaction())
{
    // [...]

    var status = new ImportStatus();

    status.Symbol = symbol;
    status.DateLastImport = DateTime.Now;

     //Explicitly setting the State should be all you need to do
    context.Entry(status).State = EntityState.Modified;

    await db.SaveChangesAsync(cancellationToken);
    await transaction.CommitAsync(cancellationToken);
}

РЕДАКТИРОВАТЬ:

Там Это критическое изменение в EF Core 3.0, предложенное здесь решение не будет работать: если PK не установлен, объект будет считаться добавленным, даже если вы явно установили постоянное состояние. Подробнее здесь

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