在ef核心中更新一个实体wo查询它指定交替键?

我想更新一个实体(不需要请求它),只需要指定交替键。这可能吗?

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);
}

解决方案:

试试使用 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);
}

EDIT:

在EF Core 3.0中有一个突破性的变化,这里提出的解决方案将无法工作:如果PK未被设置,实体将被认为是添加的,即使你明确设置了持久化状态。更多信息 此处

给TA打赏
共{{data.count}}人
人已打赏
未分类

我在Flutter中访问一个数组值有问题

2022-9-9 6:58:21

未分类

为什么我的CMake图形用户界面看起来和平时不一样?

2022-9-9 7:09:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索