Tôi đang sử dụng ASP.NET MVC4 với Entity Framework Code Đầu tiên. Tôi có một bảng gọi là "người dùng", với khóa chính "UserId". Bảng này có thể có hơn 200.000 mục nhập.Bỏ qua chèn khóa trùng lặp với Entity Framework
Tôi cần phải chèn thêm 50 người dùng khác. Tôi có thể làm điều này như
foreach(User user in NewUsers){
context.Add(user);
}
dbcontext.SaveChanges();
Vấn đề là, một hoặc nhiều người dùng mới có thể đã tồn tại trong DB. Nếu tôi thêm chúng và sau đó cố gắng để tiết kiệm, nó ném một lỗi và không ai trong số những cái hợp lệ được thêm vào. Tôi có thể sửa đổi mã để làm điều này:
foreach(User user in NewUsers){
if(dbcontext.Users.FirstOrDefault(u => u.UserId) == null)
{
dbcontext.Users.Add(user);
}
}
dbcontext.SaveChanges();
sẽ hoạt động. Vấn đề là, sau đó nó phải chạy một truy vấn 50 lần trên một bảng nhập 200.000+. Vì vậy, câu hỏi của tôi là, phương pháp hiệu quả nhất để chèn những người dùng này, bỏ qua bất kỳ bản sao nào?
lẽ 'context.AddOrUpdate (người sử dụng); 'là những gì bạn muốn –
@OO Nó không thực sự người dùng, đó là dữ liệu khác nhau đang được lấy từ API. API có thể hoặc không thể cung cấp cùng một dữ liệu trong nhiều cuộc gọi tuần tự. Tôi chỉ sử dụng "Người dùng" vì đó là ví dụ đầu tiên tôi nghĩ đến. – Jordan
Tôi gặp vấn đề tương tự và không tìm được giải pháp phù hợp. Có các trường hợp hợp lệ cho điều này, chẳng hạn như khi thực hiện nhập hàng loạt từ CSV nơi địa chỉ email cần phải là duy nhất trong cơ sở dữ liệu hiện có. Đọc tất cả các khóa hiện có vào bộ nhớ có vẻ không tốt cho hiệu suất, không phải là thêm từng mục riêng biệt. Có vẻ như những gì là cần thiết là một cái gì đó giống như INSERT IGNORE. – acarlon