.NET ORM学习之EF框架
2017-01-08 17:01
519 查看
Entity Framework是ORMapping的一种具体实现
其实Entity
Framework的底层也是调用Ado.Net,它是更高层次的封装.作为数据访问的技术,Entity
Framework的设计有高扩展性,这一点可体现在其映射定义的灵活性.简单地说,使用Entity Framework可以充分地定义与数据库表映射的实体,这个实体可以直接用于业务逻辑层或作为服务的数据契约.使用EF后,可以将实体类的设计工作完全放在EDM的设计过程中,而不需要手工写那些大同小异的代码,令人欣喜的是这个实体模型可以在运行时修改并生效,做到一改全改.我们开发时也不用再频繁地与数据库打交道,我们操作实体模型的同时EF框架自动完成了对数据库的操作
下面就是EF简单增删改查的示例 还是请大家看代码吧
首先在项目中添加一个ADO.NET实体数据模型,设置自己需要的数据库表结构,然后生成实体类
添加数据
增加一条记录
[b]上下文实体类在数据模型DataModel.Context.tt里面
[/b]
用户表跟订单表是1对多的关系,所以用户表的导航属性OrderInfo是ICollection<OrderInfo>集合,
而订单对用户是唯一的,两种方式都可以添加
bdd1
删除数据
修改数据
删除跟修改相对比较简单,下面详细说说查询(linq跟lambda两种方式)
查询数据
查询所有数据
表连接查询
分页查询
以上是我自学过程中所整理的笔记,希望能对正在学习EF框架的朋友一些帮助
其实Entity
Framework的底层也是调用Ado.Net,它是更高层次的封装.作为数据访问的技术,Entity
Framework的设计有高扩展性,这一点可体现在其映射定义的灵活性.简单地说,使用Entity Framework可以充分地定义与数据库表映射的实体,这个实体可以直接用于业务逻辑层或作为服务的数据契约.使用EF后,可以将实体类的设计工作完全放在EDM的设计过程中,而不需要手工写那些大同小异的代码,令人欣喜的是这个实体模型可以在运行时修改并生效,做到一改全改.我们开发时也不用再频繁地与数据库打交道,我们操作实体模型的同时EF框架自动完成了对数据库的操作
下面就是EF简单增删改查的示例 还是请大家看代码吧
首先在项目中添加一个ADO.NET实体数据模型,设置自己需要的数据库表结构,然后生成实体类
添加数据
增加一条记录
[b]上下文实体类在数据模型DataModel.Context.tt里面
[/b]
DataModelContainer dbContext = new DataModelContainer();//创建上下文 Customer customer = new Customer();//创建一个实体对象 customer.CusName = "张三";//给属性赋值 dbContext.Customer.Add(customer);//添加实体 dbContext.SaveChanges();//将上下文所更新的数据保存到数据库中添加两个表的相关记录
DataModelContainer dbcontext = new DataModelContainer(); //添加一个用户 UserInfo userInfo =new UserInfo(); userInfo.UserName = "用户"; dbcontext.UserInfo.Add(userInfo);//告诉上下文对这个实体进行添加 //添加两个订单 OrderInfo order1 = new OrderInfo(); order1.Content = "订单3"; dbcontext.OrderInfo.Add(order1); OrderInfo order2 = new OrderInfo(); order2.Content = "订单4"; dbcontext.OrderInfo.Add(order2); //关联三个实体 两种方法 //1.通过用户添加订单实体到导航属性 userInfo.OrderInfo.Add(order1); //2.通过订单指定用户实体 order2.UserInfo = userInfo; dbContext.SaveChanges();
用户表跟订单表是1对多的关系,所以用户表的导航属性OrderInfo是ICollection<OrderInfo>集合,
而订单对用户是唯一的,两种方式都可以添加
bdd1
删除数据
DataModelContainer dbcontext = new DataModelContainer(); UserInfo userInfo = new UserInfo(); userInfo.ID = 1; //删除数据 dbcontext.Entry(userInfo).State = EntityState.Deleted;//枚举 dbcontext.SaveChanges();
修改数据
UserInfo userInfoEdit = new UserInfo(); userInfoEdit.ID = 1; userInfoEdit.UserName = "张三" + DateTime.Now; //修改全部 dbcontext.Entry(userInfoEdit).State = EntityState.Modified;//枚举 //修改单个属性 dbcontext.UserInfo.Attach(userInfoEdit); dbcontext.Entry<UserInfo>(userInfoEdit).Property(u => u.UserName).IsModified = true; dbcontext.SaveChanges();
删除跟修改相对比较简单,下面详细说说查询(linq跟lambda两种方式)
查询数据
查询所有数据
//查询所有数据 foreach (Class _cc in dbschool.Class) { Console.WriteLine(_cc.Id + " " + _cc.classname); } //linq表达式的返回值类型IQueryable<out T> var temp = from u in dbschool.Class where u.Id > 1//查询条件 select u; foreach (var item in temp) { Console.WriteLine(item.Id + " " + item.classname); }
表连接查询
var temp = from u in dbcontext.UserInfo.Include("OrderInfo") where u.ID > 0 && u.UserName.Contains("张") select u; //第一种延迟加载 foreach (var userinfo in temp)//用到的时候才会去查询数据 { Console.WriteLine(userinfo.ID + " " + userinfo.UserName); } //第二种延迟加载 //数据量庞大的时候使用延迟加载,linq不包含include //数据量小的时候使用include的提高效率 foreach (var userinfo in temp) { foreach (var orderinfo in userinfo.OrderInfo) { Console.WriteLine(userinfo.UserName + " " + orderinfo.ID + " " + orderinfo.Content); } }
分页查询
////lambda表达式写法 var temp = dbcontext.UserInfo//查询表名 .Where(u => u.UserName.Contains("用户"))//查询条件 .OrderBy(u => u.ID)//排序 .Skip(5 * 2)//跳过指定条数 .Take(5);//查询多少条 //linq写法 var temp = (from u in dbcontext.UserInfo where u.ID > 0 orderby u.ID descending//降序 select u).Skip(5 * 2).Take(5); foreach (var item in temp) { Console.WriteLine(item.ID + " " + item.UserName); }
以上是我自学过程中所整理的笔记,希望能对正在学习EF框架的朋友一些帮助
相关文章推荐
- .net之EF框架学习
- NFramework开源AOP框架ORM的实现原理与应用-.NET教程,.NET Framework
- Katze - 简单的.net "ORM"框架
- 基于.NET平台的分层架构实战(九)——数据访问层的第三种实现:基于NBear框架的ORM实现
- 基于.NET平台的分层架构实战(九)——数据访问层的第三种实现:基于NBear框架的ORM实现
- 【学习】关于wince5.0 的.net 框架学习——.NET Compact Framework OS Design Development
- .net_orm_grove的学习(一)
- EF实体框架需要学习的地方
- .Net中的Interception--一个简单的AOP框架学习
- .net 基础学习(vs2008 3.5框架)
- .NET开发框架:另类的MVC架构和ORM系统
- .NET学习:将VB6写的游戏修改器用.NET重写——专用游戏修改器通用框架编写
- 跟我学MVC系列(Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX)(三)Models(ORM、Repository模式、分页)
- 跟我学MVC系列(Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX)(二)Models(ORM)
- .Net中的Interception--一个简单的AOP框架学习
- 基于ORM的国产开源框架WebSharp在.Net中的应用
- 基于.NET平台的分层架构实战(九)—数据访问层的第三种实现:基于NBear框架的ORM实现
- 跟我学MVC系列(Repository模式、LINQ、EF、IOC框架Castle、JQuery、AJAX)(五)Models(ORM、Repository模式、分页)
- 基于.NET平台的分层架构实战(九)——数据访问层的第三种实现:基于NBear框架的ORM实现
- 学习笔记:银江数据源在.net下的使用方法(marshal类在框架下调用非框架dll中的使用)