第一次课 框架技术:基本功能封装好,程序员直接使用
分类:
数据访问层框架(简化数据访问)
业务层框架
表示层框架
分类:
数据访问层框架(简化数据访问)
业务层框架
表示层框架
ORM:object对象与关系relation映射Mapping,数据访问层框架技术
Linq to sql
EF 实体模型
NHbinate等
baits等
...
//前提:每一个表必须有主键
//在项目新建ADO.net实体对象模型,自动生成访问操作的上下文入口,
及实体类。
Linq to sql
EF 实体模型
NHbinate等
baits等
...
//前提:每一个表必须有主键
//在项目新建ADO.net实体对象模型,自动生成访问操作的上下文入口,
及实体类。
1获取所有数据代码1:
//定义上下文对象
上下文类名 context = new 上下文类名();
//上下文对象.对应表集合.toList
this.dataGridView1.DataSource = context.Grade.ToList();
2.增加数据
先定义要增加的对象
Grade grade = new Grade { NJName = this.textBox1.Text };
//1.往集合中增加对象
y2Net22DBEntities context = new y2Net22DBEntities();
//对象加入到集合中
context.Grade.Add(grade);
//2.同步数据库
context.SaveChanges();
3.修改数据
//修改,根据条件在上下文获取到数据集合中的一个对象
y2Net22DBEntities context = new y2Net22DBEntities();
var gr = context.Grade.Single(p => p.NJId == id);//查询一个对象
gr.NJName = this.textBox2.Text;//改属性
//同步
int n=context.SaveChanges();
4.删除:找到上下文中的一个对象
y2Net22DBEntities context = new y2Net22DBEntities();
var gr= context.Grade.Single(p => p.NJId == id);//查询一个对象
context.Grade.Remove(gr);
//同步
context.SaveChanges();
从一层可以看出EF代替了模型层与基本的数据访问的ADO.net操作
i)如果在三层中实现,EF可以放在Model中,也可以在数据访问层
ii)在DAL需要添加EF的引用
iii)需要在model中的app.config中的连接字符串,复制放到表示层的web.config中
第二次
Linq技术
一:C#新的语法与功能
LINQ( Language 11Query )即语言集成查询
LINQ 是一组语言特性和API,使得你可以使用统一的方式
编写各种查询。
查询的对象包括XML、对象集合、SQL Server 数据库等等。
where方法:用于筛选数据
返回类型为 var aa=集合.Where(p=> 条件);
select方法:用于定义显示的列
返回类型 var bb=集合.Select( p=> p );
Select(p=> new { p.属性1....}
Single方法:用于在集合中查询一个对象
返回类型 对象类型 bb=集合.Singel(p=>条件);
注意:如果有多个对象返回,将出错。
Orderby方法:用来集合按列名升序排列
OrderByDescending(p=>p.属性) 用来集合按属性降序排列
///////有筛选,有排序,写的先后顺序//////////////
//先写where,再写排序order,最后写显示select
/////////////////////
Linq语法两种写法 :语句式,方法式
1.方法式: var aa=集合.方法(参数);
2.语句式: var aa=from 变量名 in 集合
where 条件
order 属性名
select 变量名 ;
//定义上下文对象
上下文类名 context = new 上下文类名();
//上下文对象.对应表集合.toList
this.dataGridView1.DataSource = context.Grade.ToList();
2.增加数据
先定义要增加的对象
Grade grade = new Grade { NJName = this.textBox1.Text };
//1.往集合中增加对象
y2Net22DBEntities context = new y2Net22DBEntities();
//对象加入到集合中
context.Grade.Add(grade);
//2.同步数据库
context.SaveChanges();
3.修改数据
//修改,根据条件在上下文获取到数据集合中的一个对象
y2Net22DBEntities context = new y2Net22DBEntities();
var gr = context.Grade.Single(p => p.NJId == id);//查询一个对象
gr.NJName = this.textBox2.Text;//改属性
//同步
int n=context.SaveChanges();
4.删除:找到上下文中的一个对象
y2Net22DBEntities context = new y2Net22DBEntities();
var gr= context.Grade.Single(p => p.NJId == id);//查询一个对象
context.Grade.Remove(gr);
//同步
context.SaveChanges();
从一层可以看出EF代替了模型层与基本的数据访问的ADO.net操作
i)如果在三层中实现,EF可以放在Model中,也可以在数据访问层
ii)在DAL需要添加EF的引用
iii)需要在model中的app.config中的连接字符串,复制放到表示层的web.config中
第二次
Linq技术
一:C#新的语法与功能
LINQ( Language 11Query )即语言集成查询
LINQ 是一组语言特性和API,使得你可以使用统一的方式
编写各种查询。
查询的对象包括XML、对象集合、SQL Server 数据库等等。
where方法:用于筛选数据
返回类型为 var aa=集合.Where(p=> 条件);
select方法:用于定义显示的列
返回类型 var bb=集合.Select( p=> p );
Select(p=> new { p.属性1....}
Single方法:用于在集合中查询一个对象
返回类型 对象类型 bb=集合.Singel(p=>条件);
注意:如果有多个对象返回,将出错。
Orderby方法:用来集合按列名升序排列
OrderByDescending(p=>p.属性) 用来集合按属性降序排列
///////有筛选,有排序,写的先后顺序//////////////
//先写where,再写排序order,最后写显示select
/////////////////////
Linq语法两种写法 :语句式,方法式
1.方法式: var aa=集合.方法(参数);
2.语句式: var aa=from 变量名 in 集合
where 条件
order 属性名
select 变量名 ;
注意:语句式比方法式运行效率低
语法先写where ,再写排序, 最后写select
语法先写where ,再写排序, 最后写select
Max 最大值 (只能是一个属性的集合)
Min 最小值
Count 计数
Average 平均值
Sum 求和
Skip 跳过几条 skip(数字)
Take 取集合中的几个对象 take(数字)
知识点:委托
1.是C#中一种类型,本质是一种特殊的类。定义在命名空间中。
C#类型:类,接口,枚举,结构,委托
2.C#委托,特殊的类,用来指代行为。初始化时关联方法。
1)定义委托 public delegate 返回值类型 委托名(方法参数)
2)关联方法 委托类型 对象=new 委托类型名(方法名)
3)调用委托 对象(实参) 实际实现的结果为指代的方法。
3.多态:同一行语句,有不同的运行结果.
实现方法(方法重写,接口,委托...)
4.委托可以作为方法的参数,调用委托作为参数的方法,必须用
一个方法作为实参调用。
事件:事件就是委托对象
5. Lambda表达式 格式 ( 方法参数 )=> { 方法体}
本质就是一个功能性方法. =>运算式 用来分隔参数与方法体
参数只用一个,方法体只一个语句,()可以省略掉
6.使用Lambda表达式之前,先定义一个委托,需要关联方法时,
用Lamdba表达式与之关联。
7.框架定义了两个常见委托Action,Func,看到Action,Func作为参数
可以代替大多数方法
Action用来代替没有返回值,可以用任何多参数的方法。
Func有返回值,最后一个参数输出。
实参采用Lambda表达式.Select(p=>p); where(p=>条件)
上机:理解案例,仿照做一次。
知识点:
一:扩展方法
1)作用:往一个已经生成的类中加方法
2)如何加:
1)写一个静态类 类前static
2)写一个静态方法
public static 返回值类型 方法名(this 类型 变量,方法参数){
方法功能。。。。
}
3)调用用 对象.方法(参数);
注意:
1.当类本身的方法与扩展方法同名时,优先类本身的方法
2.如果对父类扩展方法,则子类也会有该扩展方法
3.如果对接口扩展方法,则所有实现类均有该扩展方法。
public interface 接口名{ 方法定义 } ,实现类实现所有方法
二:var :推断类型
var 用来修饰一个可以推断出类型的局部变量
格式: var 变量=表达式或值. 由右边来确定左边变量的类型.
注意 , 不能 var aa=null;
三:匿名类的对象,不定义类,直接通过对象初始化器定义对象
格式: var aa=new { Name="李四", Age=19 }
第三次课
多表数据显示方法
//有主外键关系,ef中的多显示,例如显示学生
//方法一:使用导航属性
/*
y2Net22DBEntities context = new y2Net22DBEntities();
this.dataGridView1.DataSource=
context.Student.Select(p=>new {
p.XSDZ,
p.XSName,
p.Grade.NJName})
.ToList();
*/
//主法二:使用Linq连接查询
y2Net22DBEntities context = new y2Net22DBEntities();
var grade1 = context.Grade;
var students = context.Student;
var showdata = from g in grade1
join b in students on g.NJId equals b.XSGrade
select new { g.NJName, b.XSName, b.XSSex };
this.dataGridView1.DataSource = showdata.ToList();
多表数据显示方法
//有主外键关系,ef中的多显示,例如显示学生
//方法一:使用导航属性
/*
y2Net22DBEntities context = new y2Net22DBEntities();
this.dataGridView1.DataSource=
context.Student.Select(p=>new {
p.XSDZ,
p.XSName,
p.Grade.NJName})
.ToList();
*/
//主法二:使用Linq连接查询
y2Net22DBEntities context = new y2Net22DBEntities();
var grade1 = context.Grade;
var students = context.Student;
var showdata = from g in grade1
join b in students on g.NJId equals b.XSGrade
select new { g.NJName, b.XSName, b.XSSex };
this.dataGridView1.DataSource = showdata.ToList();
子查询写法
第四次课
Linq to sql 的ORM技术实现功能
1.模糊查询 示例 查询学生名有什么关键字
var aa= dbcontext.Student.Where(p=>p.XSName.IndexOf(key)>=0
2.登陆条件查询 先查询,再计数,再比较
var aa = from a in dbcontex.Admin
where a.UserName.Equals(name)
&& a.UserPwd == pwd
select a;int count = aa.Count(); bool f = count > 0;
3.显示多表数据 如果创建了主外键关联
方法一:使用导航属性 //查询学生,并显示出班级的名称,两表关联
public static IQueryable GetStudent()
{
var aa = from p in dbcontext.Student
select new {
p.XSName,
p.XSSex,
p.Grade.NJName //导航属性 };
return aa; }
方法二:使用Linq的连接方法:用于显示两个有意义的集合之间的数据
var gradelist = dbcontext.Grade;//1
var studentList = dbcontext.Student;//2
var aaaaa = from g in gradelist
join s in studentList
on g.NJId equals s.XSGrade
//where ...
select new
{
g.NJId,g.NJName, s.XSName,
};
方法三:使用子查询
注意:如果两个集合,在意义上有关联关系,没有创建关联,只能用第二个方法。
-------------------------------------------------------------------
Linq to SQL/EF取代ADO.net完成对数据库的访问,有时有些特别复杂的sql语句,
Linq to sql/EF(ORM技术)可能还是不能实现。如何做?Linq to sql/EF中集成了,方法
可以直接获取ADO.net的连接对象 执行SQL语句操作。主要两种,一个是查询,一个增删改
1。调用查询语句方法
1)先定义一个显示出结果对应列属性的实体类(主要不是显示查询所有列)
2)写好sql语句,可以使用参数化语句
3)使用方法dbcontext.dataBase.ExecuteQuery<结果对应实体类>(sql).ToList()
2.调用增删改的方法
1)写好sql语句,可以使用参数化sql语句
2)使用方法dbcontext.ExecuteCommand(sql);
第四次课
Linq to sql 的ORM技术实现功能
1.模糊查询 示例 查询学生名有什么关键字
var aa= dbcontext.Student.Where(p=>p.XSName.IndexOf(key)>=0
2.登陆条件查询 先查询,再计数,再比较
var aa = from a in dbcontex.Admin
where a.UserName.Equals(name)
&& a.UserPwd == pwd
select a;int count = aa.Count(); bool f = count > 0;
3.显示多表数据 如果创建了主外键关联
方法一:使用导航属性 //查询学生,并显示出班级的名称,两表关联
public static IQueryable GetStudent()
{
var aa = from p in dbcontext.Student
select new {
p.XSName,
p.XSSex,
p.Grade.NJName //导航属性 };
return aa; }
方法二:使用Linq的连接方法:用于显示两个有意义的集合之间的数据
var gradelist = dbcontext.Grade;//1
var studentList = dbcontext.Student;//2
var aaaaa = from g in gradelist
join s in studentList
on g.NJId equals s.XSGrade
//where ...
select new
{
g.NJId,g.NJName, s.XSName,
};
方法三:使用子查询
注意:如果两个集合,在意义上有关联关系,没有创建关联,只能用第二个方法。
-------------------------------------------------------------------
Linq to SQL/EF取代ADO.net完成对数据库的访问,有时有些特别复杂的sql语句,
Linq to sql/EF(ORM技术)可能还是不能实现。如何做?Linq to sql/EF中集成了,方法
可以直接获取ADO.net的连接对象 执行SQL语句操作。主要两种,一个是查询,一个增删改
1。调用查询语句方法
1)先定义一个显示出结果对应列属性的实体类(主要不是显示查询所有列)
2)写好sql语句,可以使用参数化语句
3)使用方法dbcontext.dataBase.ExecuteQuery<结果对应实体类>(sql).ToList()
2.调用增删改的方法
1)写好sql语句,可以使用参数化sql语句
2)使用方法dbcontext.ExecuteCommand(sql);