/*********************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();

Linq无聊练习系列7----Insert,delete,update,attach操作练习的更多相关文章

  1. 带有OUTPUT的INSERT,DELETE,UPDATE

    原文地址:http://blog.sina.com.cn/s/blog_71460d950100nld2.html OUTPUT是SQL SERVER2005的新特性.可以从数据修改语句中返回输出.可 ...

  2. Use Select To Generate Any Insert/Delete/Update Statement

    If you don't have the permission to generate script according to an existing db, but you have the re ...

  3. sqlserver触发器insert,delete,update

    Create Trigger [dbo].[upemployee_kefyu_sale] on [dbo].[employee] for update as if update(FullName) b ...

  4. sql server 带有OUTPUT的INSERT,DELETE,UPDATE

    原文:sql server 带有OUTPUT的INSERT,DELETE,UPDATE OUTPUT是SQL SERVER2005的新特性.可以从数据修改语句中返回输出.可以看作是"返回结果 ...

  5. MySQL进阶10--DML数据操纵预言: insert/delete/update --多表连接修改/.多表连接删除/多表连接查询-- truncate 和 delete的区别

    /* DML -- 数据操纵预言: insert/delete/update */ #一: 插入语句 /* 语法1: insert into 表名(列名,..,列名....) values(值1,值2 ...

  6. 触发器内insert,delete,update判断执行不同的内容

    create trigger tr_aon afor insert,update,delere asbegin IF EXISTS(SELECT 1 FROM inserted) AND NOT EX ...

  7. MyBatis insert/delete/update 的返回值

    insert,返回值是:新插入行的主键(primary key):需要包含<selectKey>语句,才会返回主键,否则返回值为null. <insert id="inse ...

  8. Linq无聊练习系列8---开放式并发事务,null和 DateTime,string操作练习

    /*********************开放式并发事务,null和 DateTime,string操作练习**********************************/ //所谓并发,就是 ...

  9. Linq无聊练习系列1--where练习

    linq主要有3种,linq to sql,linq to XML,Linq to Object linq to sql. 这里没有通过相应的类,生成相应的数据库中的表.没有用流行的编码优先. 只是为 ...

随机推荐

  1. 怎样改动、扩展并重写Magento代码

    作为一个开发人员的你,肯定要改动Magento代码去适应你的业务需求,可是在非常多时候我们不希望改动Magento的核心代码,这里有非常多原因, 比如将来还希望升级Magento.还想使用很多其它的M ...

  2. 贪心算法(Greedy Algorithm)最小生成树 克鲁斯卡尔算法(Kruskal&#39;s algorithm)

    克鲁斯卡尔算法(Kruskal's algorithm)它既是古典最低的一个简单的了解生成树算法. 这充分反映了这一点贪心算法的精髓.该方法可以通常的图被表示.图选择这里借用Wikipedia在.非常 ...

  3. Nyoj 吝啬的国度(图论&&双DFS)

    描述在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你 ...

  4. HDU 4946 Area of Mushroom 凸包 第八次多校

    题目链接:hdu 4946 题意:一大神有N个学生,各个都是小神,大神有个二次元空间,每一个小神都有一个初始坐标,如今大神把这些空间分给徒弟们,规则是假设这个地方有一个人比谁都先到这,那么这个地方就是 ...

  5. java 不寻常的问题 No bean named &#39;sessionFactory&#39; is defined 和 initialize a collection of role

    左右java的"No bean named 'sessionFactory' is defined "  现在经常出去SHH或在其框架内Sping+JPA使用底部HIbernate ...

  6. IEnumerable,IQueryable的区别

    IEnumerable,IQueryable之前世今生 IEnumerable<T>在.Net2.0中我们已经很熟悉了.你想要利用Foreach迭代吗?实现IEnumerable<T ...

  7. ROOT android 原理。 基于(zergRush)

    出自: http://bbs.gfan.com/android-2996211-1-1.html 须要ROOT的同学请去上面的地址下载. a.控制手机创建个暂时目录,然后把zergRush脚本写入此目 ...

  8. 2440裸 Delay(); 和 while(!(rUTRSTAT0 &amp; 0x2)); 问题

    前两天写RTC中断 使用串行输出 它发现,该方案将while(!(rUTRSTAT0 & 0x2));走不出的情况.的 解决方法: main函数添加: U32 mpll_val = 0,con ...

  9. WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信

    原文:WebBrowser一点心得,如果在Javascript和Winform代码之间实现双向通信 最近工作需要,学习了一下winform内嵌webbrowser控件,然后与htm页面中的javasc ...

  10. 怎样使Android应用程序获得root权限

    Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 写这篇文章前,首先要感谢 Simon_fu ,他的两篇关于 root 权 ...