【发布时间】:2020-11-05 14:29:16
【问题描述】:
我的代码验证数据库中是否已存在项目。如果不存在,则会添加。
foreach(var element in elements)
{
var item = new Item
{
Id = element.Id,
...
}
if (!await context.Itens.ContainsAsync(new Item { Id = item.Id }))
await context.Itens.AddAsync(item);
}
await context.SaveChangesAsync();
请注意,项目是在 foreach 循环中创建的,并且上下文更改保存在循环之外。此代码无法正常工作。我的数据库中有重复的项目。
也许 ContainsAsync 方法只是在数据库上验证,而不是在 DbSet 上验证?
【问题讨论】:
-
Id不是主键吗? -
new Item { Id = item.Id }永远不会等于context.Items中的任何项目,因为它基于对象相等性。
标签: c# entity-framework .net-core entity-framework-core