Linq无聊练习系列7----Insert,delete,update,attach操作练习
/*********************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操作练习的更多相关文章
- 带有OUTPUT的INSERT,DELETE,UPDATE
原文地址:http://blog.sina.com.cn/s/blog_71460d950100nld2.html OUTPUT是SQL SERVER2005的新特性.可以从数据修改语句中返回输出.可 ...
- 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 ...
- sqlserver触发器insert,delete,update
Create Trigger [dbo].[upemployee_kefyu_sale] on [dbo].[employee] for update as if update(FullName) b ...
- sql server 带有OUTPUT的INSERT,DELETE,UPDATE
原文:sql server 带有OUTPUT的INSERT,DELETE,UPDATE OUTPUT是SQL SERVER2005的新特性.可以从数据修改语句中返回输出.可以看作是"返回结果 ...
- MySQL进阶10--DML数据操纵预言: insert/delete/update --多表连接修改/.多表连接删除/多表连接查询-- truncate 和 delete的区别
/* DML -- 数据操纵预言: insert/delete/update */ #一: 插入语句 /* 语法1: insert into 表名(列名,..,列名....) values(值1,值2 ...
- 触发器内insert,delete,update判断执行不同的内容
create trigger tr_aon afor insert,update,delere asbegin IF EXISTS(SELECT 1 FROM inserted) AND NOT EX ...
- MyBatis insert/delete/update 的返回值
insert,返回值是:新插入行的主键(primary key):需要包含<selectKey>语句,才会返回主键,否则返回值为null. <insert id="inse ...
- Linq无聊练习系列8---开放式并发事务,null和 DateTime,string操作练习
/*********************开放式并发事务,null和 DateTime,string操作练习**********************************/ //所谓并发,就是 ...
- Linq无聊练习系列1--where练习
linq主要有3种,linq to sql,linq to XML,Linq to Object linq to sql. 这里没有通过相应的类,生成相应的数据库中的表.没有用流行的编码优先. 只是为 ...
随机推荐
- 于ios7在遇到一些发展deprecated问题
cell.textLabel.textAlignment = UITextAlignmentCenter; 现在我想写cell.textLabel.textAlignment =NSTextAlign ...
- FMDB与GCD
郝萌主倾心贡献.尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠.支持郝萌主,捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 因为FMD ...
- 连载:面向对象的葵花宝典:思维、技能与实践(40) - DECORATOR模式
掌握了道路后,设计模式,我们将以新的方式来理解设计模式,这种方法更简单.更直观.不信?子就知道了 =================================================== ...
- crawler_爬虫开发的准备工作【工具】
俗话说工欲善其事必先利其器,做java网络爬虫开发分析网页的分析工具,抓包工具比不可少,一下是个人常用的几个工具. 1.firefox低版本是为了支持httpwather , ie各个版本都支持htt ...
- linux_awk_内部正则过滤
awk -F'\t' '{if($3 !~ /^<p><img/){print $0}}' latex500.db|wc -l
- 3.集--LinkedTransferQueue得知
近期在阅读开源项目里,发现有几个project都不尽同样地使用LinkedTransferQueue这个数据结构.比方netty,grizzly,xmemcache,Bonecp. Bonecp还扩展 ...
- 基于Servlet、JSP、JDBC、MySQL登录模块(包括使用的过滤器和配置)
遇见前文的注冊模块,本篇是登录模块.主要包含登录主界面,和登录相关编写的LoginAction.LoginDao和LoginService.以及配置的Filter.以下按逻辑顺序记录具体过程和代码: ...
- word 一些有用的技巧
为了能够word入代码,而且具备代码高亮显示功能.这里我提供一个工具------Notepad++,它具备一般文本的功能,且具备编写代码的功能. 包含代码排版,高亮显示,加入和删除凝视等. 在 语 ...
- AngularJS 疑难问题解决汇总
AngularJS 防止页面闪烁的方法 angularjs filter 详解 学习资料1 学习资料2 在 AngularJS 应用中处理单选框和复选框 学习资料3 AngularJS 之 Facto ...
- 从头开始学JavaScript (八)——变量
原文:从头开始学JavaScript (八)--变量 一.变量分类: 基本类型值:null.undefined.number.string.Boolean: 引用类型值:保存在内存中的对象,如:Obj ...