实体框架核心–是否可以“如果不存在则插入”?

时间:2019-03-14 07:49:19

标签: c# entity-framework entity-framework-core

我目前正在解决一个简单的SQL问题,我似乎无法使用“纯” Entity Framework Core 2.2进行修复。

如何在插入过程中检查某个实体是否已经存在而无需执行以下操作?

var entity = await _repository.Get(message.Id);

if(entity == null)
{
    entity = new Entity ();
    // do something with the entity
    await _repository.AddAsync(entity);
}
else
{
    // do something with the entity
    await _repository.Update(entity);
}

await _repository.SaveChangesAsync();

这还不够安全。我不断收到主键冲突。我的服务在多个实例上运行,并且在短时间内收到具有相同主键的消息。

是否有一种更好,更安全的方法来检查实体框架核心中是否已经存在一个实体,而无需自己编写SQL?

1 个答案:

答案 0 :(得分:3)

当前,EF Core本身不支持Upsert(在此处打​​开GitHub问题:https://github.com/aspnet/EntityFrameworkCore/issues/4526#issuecomment-366818031

可以在此处找到扩展EF Core以支持此功能的开源库:https://github.com/artiomchi/FlexLabs.Upsert