/*********************Insert,delete,update,attach操作练习**********************************/
            //简单插入形式
            var student = new T_Student
            {
                stuNumber = "20091777",
                stuName = "张航",
                stuAge = 23,
                stuSex = "男"
            };

ctx.T_Student.InsertOnSubmit(student);
            ctx.SubmitChanges();
            //一对多形式,或者多对多形式,需要按照主外健关系依次插入

var student1 = new T_Student
            {
                stuNumber = "2009177",
                stuName = "谢亮",
                stuAge = 23,
                stuSex = "男"
            };
            var score1 = new T_Score
            {
                stuNumber = student1.stuNumber,
                courceNumber = "001",
                score = 78
            };
            var score2 = new T_Score
            {
                stuNumber = student1.stuNumber,
                courceNumber = "002",
                score = 78
            };

     ctx.T_Student.InsertOnSubmit(student1);
            ctx.T_Score.InsertOnSubmit(score1);
            ctx.T_Score.InsertOnSubmit(score2);
            ctx.SubmitChanges();

//更爱张航的年龄为21,这种涉及到单项或者更改项很少的,可以用下面的方式更改

var list = ctx.T_Student.First(s=>s.stuName=="张航");
            list.stuAge = 21;
            ctx.T_Student.InsertOnSubmit(list);
            ctx.SubmitChanges();

//让学生表中各个学生的年龄加一岁
            var list1 = from t in ctx.T_Student
                         select t;
            foreach (var item in list1)
            {
                item.stuAge = item.stuAge + 1;
            }
            ctx.T_Student.InsertAllOnSubmit(list1);
            ctx.SubmitChanges();

//删除学号为2091721,课程编号为002的学生
            var list2 = ctx.T_Score.First(s => s.stuNumber == "2091721"&&s.courceNumber=="002");
            ctx.T_Score.DeleteOnSubmit(list2);
            ctx.SubmitChanges();
            //删除学号为黄阳的个人信息及分数信息
            var list3 = ctx.T_Student.First(s=>s.stuName=="黄阳");
            var list4 = from a in ctx.T_Score
                        where a.T_Student.stuName == "黄阳"
                        select a;
            foreach (var item in list4)
            {
                ctx.T_Score.DeleteOnSubmit(item);
            }
            ctx.T_Student.DeleteOnSubmit(list3);
            ctx.SubmitChanges();
            //还可以推理删除,推理删除需要用Remove方法。由于表的设计不是很完善,这里就不给演示了
            
            //对于在不同的上下文间,需要使用attach方法进行更新,如在一个上下文中查出一个叫黄阳的学生和它的各科成绩,在另一个上下文中将其年龄改为19,将其所有学科科目成绩改为33分
            T_Student student2;
            List<T_Score> listScore = new List<T_Score>();
            using (DB_StudentDataContext ctx1 = new DB_StudentDataContext())
            {
                var stu = ctx1.T_Student.First(s=>s.stuName=="黄阳");
                student2 = new T_Student {
                    stuNumber=stu.stuNumber,
                    stuName=stu.stuName,
                    stuAge=stu.stuAge,
                    stuSex=stu.stuSex
                };

var scores = from k in ctx1.T_Score
                             where k.T_Student.stuName == "黄阳"
                             select k;
                foreach (var item in scores)
                {
                    listScore.Add(item);
                }
            }

ctx.T_Student.Attach(student2);
            student.stuSex = "19";

ctx.T_Score.AttachAll(listScore);
            foreach (var item in listScore)
            {
                item.score = 33;
            }

ctx.SubmitChanges();

//使用attach进行删除,更改,插入

T_Student student3 = null;
            using (DB_StudentDataContext ctx2 = new DB_StudentDataContext())
            {
                DataLoadOptions dlo = new DataLoadOptions();
                dlo.LoadWith<T_Student>(s => s.T_Score);
                ctx2.DeferredLoadingEnabled = false;
                student3 = ctx2.T_Student.First(s=>s.stuName=="黄阳");
            }
            T_Score scores1 = student3.T_Score.First();
            T_Score scores2 = student3.T_Score.First(s => Convert.ToInt32(s.stuNumber) > Convert.ToInt32(scores1.stuNumber));

using (DB_StudentDataContext ctx3 = new DB_StudentDataContext())
            {
                ctx3.T_Student.Attach(student3);
                ctx3.T_Score.AttachAll(student3.T_Score.ToList());
                scores1.score = 80;
                student3.T_Score.Remove(scores2);

T_Score score3 = new T_Score {
                    stuNumber = "2009177",
                    courceNumber = "003",
                    score=88
                };
                student3.T_Score.Add(score3);

ctx3.SubmitChanges();

转载于:https://www.cnblogs.com/selfimprove/p/3612732.html

Linq无聊练习系列7----Insert,delete,update,attach操作练习相关推荐

  1. 触发器实现两表之间的INSERT,DELETE,UPDATE

    需求说明:培训记录处录入"外出培训"记录,保存后同步外出培训合同至"合同模块" 培训记录表PX_Record创建触发器 步骤一.新建触发器:[insert_ht ...

  2. MySQL5.7 支持一个表有多个INSERT/DELETE/UPDATE触发器

    在MySQL5.6版本里,不支持一个表有多个INSERT/DELETE/UPDATE触发器. 例如创建t1表两个INSERT的触发器: DELIMITER $$ USE `test`$$ DROP T ...

  3. mysql 5.7 insert_MySQL5.7 支持一个表有多个INSERT/DELETE/UPDATE触发器

    在MySQL5.6版本里,不支持一个表有多个INSERT/DELETE/UPDATE触发器. 例如创建t1表两个INSERT的触发器:DELIMITER $$ USE `test`$$ DROP TR ...

  4. MySQL 数据库常用命令—insert delete update select

    引言 MySQL 数据库和其它的数据库一样,也支持增(insert)删(delete)改(update)查(select)操作. insert 基本语法规则 insert into table_nam ...

  5. SQLite Tutorial 3 : Working with important SqLite Queries (SELECT, INSERT, DELETE, UPDATE,WHERE...)

    1.SELECT a.选择所有数据 b.选择某列 c.选择多列 d.选择某行某列 其他WHERE语句 WHERE age between 32 and 38 WHERE gender='Male' e ...

  6. JDBC PrepareStatement insert delete update DML

    文章目录 class PrepareStatementInsert PrepareStatementUpdate PrepareStatementDelete class PrepareStateme ...

  7. JDBC insert delete update(DML)

    文章目录 思路感悟 原始数据1 class JDBCInsert 插入数据之后 原始数据2 JDBCDelete 删除数据之后 原始数据 class JDBCUpdate 更新数据之后 思路感悟 原始 ...

  8. 深入浅出Mybatis系列(七)---mapper映射文件配置之insert、update、delete

    2019独角兽企业重金招聘Python工程师标准>>> 上篇文章<深入浅出Mybatis系列(六)---objectFactory.plugins.mappers简介与配置&g ...

  9. MongoDB入门系列(二):Insert、Update、Delete、Drop

    概述 本章节介绍Insert.Update.Delete.Drop操作基本语法. 环境: Version:3.4 insert insert()基本语法如下: db.collection.insert ...

最新文章

  1. Linux下载安装配置FTP
  2. 在CentOS7上配置Open vSwitch和VXLAN
  3. PHP ORM框架ezpdo(2)之EZPDOSQL
  4. BZOJ1021 [SHOI2008]循环的债务
  5. 分享一些书籍,方方面面,很多值得一读
  6. rman report 命令
  7. 批量提取 caffe 特征 (python, C++, Matlab)(待续)
  8. div中文字,图片居中对齐,兼容FF、IE
  9. BGP/MPLS *** Option B 跨域研究实验
  10. __RESTRICT修改为__RRSTRICT,程序闪退。
  11. 【kafka】Kafka 幂等 Producer
  12. python给用户打标签_用Python实现RFM模型——互联网产品用户分层必备技巧
  13. JSF之经常使用注解
  14. AOP处理事务静、动态代理(jdk方法)
  15. sitemap.xml 静态和动态生成页面 shopnc二次开发 动态生成sitemap.xml
  16. 如何对接快递助手物流查询接口【干货】
  17. 作战管理系统:现代化作战体系核心
  18. 谷歌邮箱无法显示使用 Base64 处理的图片的解决方法
  19. 源自神话的写作要义之英雄之旅
  20. 自动化部署流程_自动化会议提交工作流程:部署到生产

热门文章

  1. document.createElement()的用法
  2. hdu 4421(枚举+2-sat)
  3. python---之hasattr()
  4. 数据结构上机实践第四周项目6- 循环双链表应用
  5. ios 格式化html字符串,ios – 粘贴格式化文本,不是图像或HTML
  6. php脚本日志文件,php脚本-定期删除日志文件,删除历史日志 保留最近7天
  7. BCrypt加密怎么存入数据库_松哥手把手带你入门 Spring Security,别再问密码怎么解密了...
  8. linux什么命令查设备型号,在Linux命令行中查看系统硬件制造商、型号与序列号的六种方法...
  9. 查看kafka的主从状态_Kafka 集群部署
  10. android曲线水波纹录音动画,Android-贝塞尔曲线实现水波纹动画