EF(常用的ORM框架)

上传和下载.net开源插件项目的网站 www.nuget.org

ORM:实体对象关系型数据库映射,这一类的组件都叫做ORM

对象——》数据库——》  对象的映射的过程

ORM关系图:

 

EF:是一种很常用的ORM框架

 

Linq增删改

 

增:

删:

改:

查:

 

深入EF

Model1.edmx:其实本质就是一个XML文件

XML:其中有三个重要部分

1数据库中的实体节点

2集合中的实体对象节点

3映射关系节点

 

后缀tt结尾其实就是一个文件模板

 

 

2016-7-7ModelFirst

 

ModelFrist
代码先行,即先写模型代码,后生成数据库中的表
相对于先设计数据库,在生成模型代码

 

使用情况:
当你的项目没有使用EF的时候,就可以这么来做,ModelFrist代码先行
注意:
要保持数据库就概念模型对象的一致,如果发生了不一致的情况,那么要从数据库中更新模型
或者更具模型生成数据库,至少要更新一边,但是可能会丢失数据,所以最好不要更具模型来更新数据库

 

延时加载
使用Linq的时候, 返回IQueryble<T>或IEnumerable<T>都是延迟加载的,在没有用的时候是不会执行SQL语句,只有再用到数据的时候才会执行SQL语句。
如果你想要先得到数据再来操作的话可以使用一个方法
var list2 = list.ToList<T>();//这里的list时拼接linq命令后的得到的对象

2016-7-7dbContext笔记

DbContext中还有两大集合
Entry
Set

增加,查询时,推荐使用属性的方式
修改,删除使用Entry标记的方式来


增加
//先创建一个DbContext 这里创建的是context
//创建一个新的对象类型这里以Student为例
Student s1 = new Student(){sName = "jk", sAddress = "hb"};;
context.Entry<Student>(s1).State = EntityState.Added;
context.SaveChanges();
//添加和不适用标记的方式没什么太大的区别,建议不使用标记的方式增加


删除 (推荐使用)//只根据主键删除
Student s1 = new Student(){sID = 8, sAddress = "hb"};
context.Entry<Student>(s1).State = EntityState.Deleted;
context.SaveChanges();


改//除了主键列其他的都会被改变
Student s1 = new Student(){sID = 8, sAddress = "已经被改变的值"};
context.Entry<Student>(s1).State = EntityState.Modifed;
context.SaveChanges();


Set
//以下两个东西可以画等号
context.Student
context.Set<Student>


Linq Lambda分页 //这种要会,之前用的存储过程的和SQl语句的也要会,这种不会全部内容都查出来,你要什么就可以查什么 要查看里面的SQL语句可以在SQlserver中监视查看
satic List<Student> GetPageList(Func<Student,bool> whereLambda,Func<Student,Object>orderlambda,int pageSize,int pageIndex)
{
  创建一个DbContext 这里创建的是context
  var list = context.Student.Where(whereLambda).OrderByDescending(orderLambda).Skip((pageIndex-1)*pageSize).Take(pageSize).Select(s=>s);
  return lisr.ToList();
}

Skip()//跳过多少项
Take()//要多少项

//方法调用
List<Student> list = GetPageList(s=>s.sID>5,s=>s.sID,2,2);


方法升华扩展(泛型)
satic List<T> GetPageList(Func<T,bool> whereLambda,Func<T,Object>orderlambda,int pageSize,int pageIndex) where T:calss
{
  创建一个DbContext 这里创建的是context
  var list = context.Set<T>().Where(whereLambda).OrderByDescending(orderLambda).Skip((pageIndex-1)*pageSize).Take(pageSize).Select(s=>s);
  return lisr.ToList();
}

 

 

原文地址:https://www.cnblogs.com/LijiafengBlog/p/5651455.html