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. 这里没有通过相应的类,生成相应的数据库中的表.没有用流行的编码优先. 只是为 ...
随机推荐
- MySQL 服务器变量 数据操作DML-视图
原文:MySQL 服务器变量 数据操作DML-视图 SQL语言的组成部分 常见分类: DDL:数据定义语言 DCL:数据控制语言,如授权 DML:数据操作语言 其它分类: 完整性定义语言: DDL的一 ...
- Skype发布视频API
原文:Skype发布视频API 相信很多人对Skype多少都应该有一些了解,如果以前没有使用过它的服务的话,也应该在最近的新闻中听说过它的大名.因为,它和我们每天都在接触的公司--Mircrosoft ...
- ORACLE查看和更改的最大连接数
第一步,在cmd命令行,进入sqlplus 第二步骤,根据提示输入username与password 1. 视图processes和sessions参数 SQL> show paramet ...
- java_linux_shell_定时kill 启动java程序
#!/bin/bash #while truedo Process_ID=`ps -ef |grep 'LoginSinaWeiboCookie.jar' |grep -v grep |awk '{p ...
- 使用SharePoint创建和定义自己的网站页面
使用SharePoint创建和定义自己的网站页面 1. 打开SharePoint Designer 2010. 2. 点击网站页面导航. 3. 在功能区点击Web部件页面,新建Employee.axp ...
- mysql_自动备份
1 @echo off 2 set errorlevel=0 3 set dump_command="C:\Program Files\MySQL\MySQL Server 5.5\bin\ ...
- android 数据共享
android数据共享的各种部件中的应用是最重要的3途径: 第一.使用Application子类来实现数据共享. 例如,请看下面的例子: /** * @author YangQuanqing 特征: ...
- 队列--Redis+Log4Net
队列--Redis+Log4Net Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景.Redi ...
- C#中四个判等函数的认识
donet提供了四个判等函数,分别是referenceEqual,静态Equal,具体类型Equal,和==. 首先来说,object.referenceEqual和静态Equal public st ...
- webBrowser.execWB的完整说明
原文:webBrowser.execWB的完整说明 在不是js打开的页面上按window.close(), 会有提示框,很烦,现在可以不用了,没有提示框直接关闭窗口.试试下面代码: <objec ...