c# - 实体框架核心——“如果不存在则插入”可能吗?
问题描述
我目前正在努力解决一个简单的 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?
解决方案
目前,EF Core 本身不支持 Upsert(在此处打开 GitHub 问题:https ://github.com/aspnet/EntityFrameworkCore/issues/4526#issuecomment-366818031 )
可以在此处找到扩展 EF Core 以支持此功能的开源库:https ://github.com/artiomchi/FlexLabs.Upsert
推荐阅读
- c# - 我很困惑 Convert.ToInt32() 是如何工作的?
- sqlite - 如何解析 18 位 sqlite 时间戳
- c++ - UI 自动化 GetFocusedElement 返回根元素
- php - 如何循环 REST API 响应?
- azure - azure sdk 中的 ListByResourceGroup() 和 GetByResourceGroup() 有什么区别?
- php - 可以为最后一个单词和数字组合正则表达式吗?
- javascript - 使用 on resize 设置 div 高度?
- c# - 使用Lambda表达式查询SQL语句填充的DataTable
- python - Python - 列表:如何从具有嵌套属性的字典列表中删除空属性?
- python - 发送折叠行的 html 报告