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实体不行吗?
...全文
2487 4 打赏 收藏 转发到动态 举报
写回复
用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的话,就不适合上面这样了。
基于栅格空间的三维路径规划与轨迹平滑方法研究及其在无人机自主导航中的应用(Matlab代码实现)内容概要:本文围绕基于栅格空间的三维路径规划与轨迹平滑方法展开研究,重点探讨其在无人机自主导航中的具体应用。通过构建三维栅格地图对飞行环境进行建模,结合智能优化算法(如A*、Dijkstra或启发式搜索)实现初步路径规划,并引入轨迹平滑技术(如样条插值、贝塞尔曲线或优化算法)消除路径中的尖锐转折,提升飞行安全性与平滑性。研究涵盖复杂三维环境下的避障策略、路径成本函数设计、多约束条件处理以及算法性能对比分析,最终通过Matlab仿真验证所提方法的有效性与实用性。; 适合人群:具备一定编程基础和算法理解能力,从事无人机、机器人、自动驾驶或路径规划相关领域的科研人员及工程技术人员,尤其适合研究生及工作1-3年的研发人员。; 使用场景及目标:① 实现复杂三维环境下无人机的安全自主飞行路径规划;② 学习并掌握基于栅格的路径建模与搜索算法;③ 理解轨迹平滑技术在实际工程中的应用价值与实现方法;④ 借助Matlab代码进行算法仿真与性能评估,支撑科研或项目开发。; 阅读建议:建议读者结合Matlab代码实例,深入理解路径规划与轨迹平滑的算法细节,动手复现并调试程序,通过调整环境参数和算法参数观察结果变化,从而加深对理论方法与工程实践之间联系的理解。

111,129

社区成员

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

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

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