gpt4 book ai didi

c# - 使用 Entity Framework 忽略重复键插入

转载 作者:IT王子 更新时间:2023-10-29 04:27:55 26 4
gpt4 key购买 nike

我使用 Entity Framework 代码优先的 ASP.NET MVC4。我有一个名为“users”的表,主键为“UserId”。此表可能有 200,000 多个条目。

我需要再插入 50 个用户。我可能会这样做

foreach(User user in NewUsers){
context.Add(user);
}
dbcontext.SaveChanges();

问题是,这些新用户中的一个或多个可能已经存在于数据库中。如果我添加它们然后尝试保存,它会抛出一个错误并且不会添加任何有效的。我可以修改代码来执行此操作:

foreach(User user in NewUsers){
if(dbcontext.Users.FirstOrDefault(u => u.UserId) == null)
{
dbcontext.Users.Add(user);
}
}
dbcontext.SaveChanges();

哪个可行。问题是,它必须在 200,000 多个条目的表上运行 50 次查询。所以我的问题是,插入这些用户最有效的方法是什么,忽略任何重复项?

最佳答案

你可以这样做:

var newUserIDs = NewUsers.Select(u => u.UserId).Distinct().ToArray();
var usersInDb = dbcontext.Users.Where(u => newUserIDs.Contains(u.UserId))
.Select(u => u.UserId).ToArray();
var usersNotInDb = NewUsers.Where(u => !usersInDb.Contains(u.UserId));
foreach(User user in usersNotInDb){
context.Add(user);
}

dbcontext.SaveChanges();

这将在您的数据库中执行一个查询来查找已经存在的用户,然后将它们从您的 NewUsers 集中过滤掉。

关于c# - 使用 Entity Framework 忽略重复键插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18113418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com