List如何实现EF批量数据插入?

morliz子轩 2020-07-19 04:15:27
背景源码如下:

private void btn_save_Click(object sender, EventArgs e)
{
Base_UserInfo UserInfo = new Base_UserInfo();
if (!string.IsNullOrEmpty(User_ID))
{
UserInfo.ModifyDate = DateTime.Now; //修改日期
UserInfo.ModifyUserId = FrmLogin.LoginUserID; //修改者ID
UserInfo.ModifyUserName = FrmLogin.loginUserName; //修改者名称
}
else
{
User_ID = Guid.NewGuid().ToString();
UserInfo.CreateDate = DateTime.Now; //创建日期
UserInfo.CreateUserId = FrmLogin.LoginUserID; //创建者ID
UserInfo.CreateUserName = FrmLogin.loginUserName; //创建者名称
}

UserInfo.DeleteMark = 1; //删除标识:0真/1假
UserInfo.Email = txt_Email.Text; //邮箱
UserInfo.Title = txt_Title.Text; //职务
UserInfo.User_Account = txt_User_Account.Text; //登录账号
UserInfo.User_Code = txt_User_Code.Text; //员工工号
UserInfo.User_ID = User_ID; //账号ID
UserInfo.User_Name = txt_User_Name.Text; //账号名称
UserInfo.User_Sex = com_User_Sex.Text; //性别
UserInfo.User_Remark = richTextBox1.Text; //备注

List<TreeNode> SelectedURight = GetSelectNode(tree_UserRight).ToList();
using(Sam_DBEntities db = new Sam_DBEntities())
{

//保存【用户权限】
if (db.Base_UserRight.Any())
{
List<Base_UserRight> URightList = db.Base_UserRight.Where(p => p.User_ID == UserInfo.User_ID).ToList();
if (URightList == null && URightList.Count <= 0)
{
foreach (var item in SelectedURight)
{
Base_UserRight URightOjb = new Base_UserRight()
{
UserRight_ID = Guid.NewGuid().ToString(),
User_ID = UserInfo.User_ID,
Menu_Id = item.Tag.ToString(),
CreateDate = DateTime.Now,
CreateUserId = UserInfo.CreateUserId,
CreateUserName = UserInfo.CreateUserName
};

}
}
}

db.Base_UserInfo.Attach(UserInfo);
db.SaveChanges();

上述【SelectedURight 】是一个TreeNode集,怎么遍历其中的Tag标识,批量写入数据库啊?
难道非要拼接sql语句,才能?用EF实体不行吗?
...全文
2420 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
datafansbj 2020-07-20
  • 打赏
  • 举报
回复
EF 实体不太了解,估计为了适配多种数据库,难以实现批量处理吧。
datafansbj 2020-07-20
  • 打赏
  • 举报
回复
批量插入数据库, SQLServer 可以使用 DataTable 存储,批量插入数据库,参见 System.Data.SqlClient.SqlBulkCopy。插入速度比逐条写入要高一个数量级。
morliz子轩 2020-07-20
  • 打赏
  • 举报
回复
引用 3 楼 正怒月神 的回复:
EF比较简单的批量插入。 就是先foreach(dbcontext.add(数据)) 最后在遍历外,save。 但是如果你需要用到一些主键或者uuid的话,就不适合上面这样了。
我查了很多资料,正如老歌说的,EF真是美中不足啊。 我是通过转换成DataTable,用SqlBulkCopy()批量写入,才得以现实。
正怒月神 2020-07-20
  • 打赏
  • 举报
回复
EF比较简单的批量插入。 就是先foreach(dbcontext.add(数据)) 最后在遍历外,save。 但是如果你需要用到一些主键或者uuid的话,就不适合上面这样了。

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧