猿问

插入批量记录。也许使用 SQL

我有一个按钮,表中包含用户列表ButtonUsers。Button使用用户列表更新父级,并且UserList应更新所有其他按钮。并非每次都是如此,因此每个按钮都有自己的列表。问题是我可能有 5000 个按钮,每个按钮都应该更新。


我尝试一次拉动所有按钮,然后拉动必要的用户,并将每个按钮状态设置为已修改。当我迭代完所有按钮后,调用SaveChanges().


public bool UpdatePreviousButtons(Button button, List<string> userList)

{

   var buttons = fieldRepo.GetFieldsCreatedFrom<Button>(button.ID);

   var users = fieldRepo.GetUsersFromIDs(userList);


   foreach(var btn in buttons)

   {

      btn.UserList = users;

      fieldRepo.UpdateFieldGeneric<Button>(btn);

   }


   return fieldRepo.Commit();

}

问题似乎是它不会批量插入记录,而是每次调用插入一条记录。这不可避免地会导致超时,并且需要很长时间。


我一直在考虑用 手动完成Context.Database.ExecuteSqlCommand()。使用实体框架有更好的方法吗?


三国纷争
浏览 104回答 1
1回答

慕标5832272

您可以尝试 SqlBulkCopy 类:作为如何使用它的简单示例:var data = new DataTable();data.Columns.Add("Name");data.Columns.Add("Id");for (var i = 1; i< 10_000; i++){    data.Rows.Add($"Name={i+1}", i+1); }using (var sqlBulk = new SqlBulkCopy(_connectionstring)){    sqlBulk.DestinationTableName = "People";    sqlBulk.WriteToServer(data);}
随时随地看视频慕课网APP
我要回答