知识储备:
- 自动属性
- 隐式类型 var
- 对象初始化器与集合初始化器
- 匿名类
- 扩展方法
- Lambda表达式
- 自动属性(Auto-Implemented Properties)
C#自动属性可以避免原来这样我们手工声明一个私有成员变量以及编写get/set逻辑
//Demo: public class User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } <span style="white-space: pre;"> </span>}
-
隐式类型 var
var关键字指示编译器根据初始化语句右侧的表达式推断变量的类型。
var s = "Hello"; var list = new List<int>(); var anon = new { Name = "Terry", Age = 34 }; anon.Name var成就了匿名类
-
匿名类
1)将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。 类型名由编译器生成,并且不能在源代码级使用。 每个属性的类型由编译器推断。[var]
2)用来初始化属性的表达式不能为 null、匿名函数或指针类型。
var v = new { Amount = 108, Message = "Hello" };
-
Lambda表达式
1)“Lambda 表达式”是一个匿名函数,它可以包含表达式和语句。可用于创建委托。
2)运算符 =>,该运算符读为“goes to”。
3)格式:(input parameters) => expression.。
从匿名函数例子讲起:
delegate bool DelDemo(int a, int b); DelDemo fun = delegate(int a,int b) { return a > b; }; Console.WriteLine(fun(1, 3)); DelDemo funLambda = (int a, int b) => a > b; Console.WriteLine(funLambda(1,3));
实体框架(Entity Framework)简介
- 简称EF
- ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace,最新版本是EF6.0【CodeOnly功能得到了更好的支持】
- 实体框架Entity Framework 是 ADO.NET 中的一组支持开发面向数据的软件应用程序的技术。是微软的一个ORM框架。
什么是O/R Mapping
- 广义上,ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。
- 狭义上,ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。理想情况下,基于这样一个面向对象的接口,持久化一个OO对象应该不需要要了解任何关系型数据库存储数据的实现细节。
EF Demo演示
- 创建控制台项目
- 创建数据库(添加表)
- 项目中添加“数据实体模型”
1)添加“数据实体模型”
2)从数据库生成
3)选择数据库连接
4)添加后解决方案资源管理器多了一个Model1.edmx
- 代码实现(添加)
//1、声明 一个EF的上下文。 //注意:这里的<span style="font-family: Arial, Helvetica, sans-serif;">bjhksjEntities 是从生成的Model1.exmx>Model.Context.tt>Model.Context.cs中获取的,不同数据库对应的上下文不同。 </span> bjhksjEntities dbContext = new bjhksjEntities();<p> //2、声明一个表实体 HKSJ_USERS user = new HKSJ_USERS(); user.LoginName = "ssss"; user.Mail = "ssss"; user.PassWord = "ssss"; user.Plane = "ssss"; user.UserName = "ssss"; user.cardNo = "ssss"; user.phone = "ssss"; //3、 告诉EF咱们对上面的实体做一个插入操作 dbContext.HKSJ_USERS.Add(user); //4、 告诉上下文把实体的变化保存到数据库里面去。 dbContext.SaveChanges(); </p>
-
代码实现(修改)
1、声明 一个EF的上下文。 bjhksjEntities dbContext = new bjhksjEntities();<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
//2、声明一个User实体 HKSJ_USERS user = new HKSJ_USERS(); user.LoginName = "ssss111--------"; user.Mail = "ssss"; user.PassWord = "ssss"; user.Plane = "ssss"; user.UserName = "ssss"; user.cardNo = "ssss"; user.phone = "ssss"; user.ID = 8;//修改删除的时候指定id //3、告诉上下文咱们的对此实体进行更新操作。 dbContext.Entry<HKSJ_USERS>(user).State = System.Data.EntityState.Modified;//修改整个User对象 //dbContext.HKSJ_USERS.Attach(user);//附加到上下文里面来管理 //dbContext.Entry<HKSJ_USERS>(user).Property<string>(u => u.LoginName).IsModified = true;//修改单个属性,强类型方案 //dbContext.Entry<HKSJ_USERS>(user).Property("LoginName").IsModified = true;//弱类型操作方案 //4、告诉上下文把实体的变化保存到数据库里面去。 dbContext.SaveChanges();//执行sql脚本的地方。
- 代码实现(查询)
//把用户表里面的所有的数据打印一遍 foreach (var user in dbContext.HKSJ_USERS) { Console.WriteLine(user.ID+" " + user.LoginName); }
-
删除需要调用上下文的DeleteObject方法
追踪EF生成的SQL脚本方法
EF生成脚本最终由数据库执行,而截获SQL脚本最方便的就是使用SqlServer的Profile监测工具,不仅可以进行Sql脚本的监控而且可以监控脚本占用的CPU、脚本执行时间。
使用方法:Management Studio→工具→SqlServer Profile 然后登陆后就可以监控当前的sqlserver执行的SQL脚本。
ORM in EF
- Entity Framework 利用了抽象化数据结构的方式,将每个数据库对象都转换成应用程序对象 (entity),而数据字段都转换为属性 (property),关系则转换为结合属性 (association),让数据库的 E/R 模型完全的转成对象模型,如此让程序设计师能用最熟悉的编程语言来调用访问。而在抽象化的结构之下,则是高度集成与对应结构的概念层、对应层和储存层,以 及支持 Entity Framework 的数据提供者 (provider),让数据访问的工作得以顺利与完整的进行。
- (1) 概念层:负责向上的对象与属性显露与访问。
- (2) 对应层:将上方的概念层和底下的储存层的数据结构对应在一起。
- (3) 储存层:依不同数据库与数据结构,而显露出实体的数据结构体,和 Provider 一起,负责实际对数据库的访问和 SQL 的产生。