前言:EF框架被称为是企业级应用框架的最佳选择,以前只是知道,一直没有学习过,这次跟着老马学习一下,顺便分享一下我的学习笔记和一些学习心得,和往常的写博客一样,下面我就先介绍一下在学习EF框架之前的准备工作吧。
1.知识准备
(1) 自动属性
1) 自动属性(Auto-Implemented Properties)。
2) 自动属性简化了我们在.NET的时候手写的一堆私有成员+属性的编程方式,我们只需要使用如下方式声明一个属性,编译器会自动生成所需要的成员变量。
3) 代码举例:
public class User
{
public int ID{get;set;}
public string Name{get;set;}
public
int Age{get;set;}
}
(2)隐式类型var
1) 这个名称可能对我们不是很陌生,但是var这个关键字应该都用过,在C#中使用var声明一个对象的时候,编译器会自动根据其赋值语句推断出这个局部变量的类型,赋值以后,这个变量的类型也就确定而不可以再进行更改,另外var关键字也用于匿名类的声明
2) 应用场合:var主要用途是表示一个Linq查询的结果,这个结果可能是ObjectQuery<>或者IQueryable<>类型的对象,这时候使用var声明这个对象可以节省很多代码书写上面的时间。
3) 代码举例:
var sline=”HANYINGLONG”;
var list=new List<int>();
var anon=new{Name=”Kencery”,Age=23};
4) 下列限制使用隐式类型的变量声明:
1)只有在同一个语句中声明或者初始化局部变量时,才能使用var;不能将该变量初始化为null,方法组或者匿名函数。
2)不能将var用于类范围的域
3)由var声明的变量不能用在初始化表达式中,换句话说,此表达式是合法的,int i=(i=20);,但此表达式会产生编译错误:var i=(i=20);
5) 不能在同一个语句中初始化多个隐式类型的变量
6) 如果范围中有一个名为var的类型,则var关键字将解析为该类型名称,而不作为隐式类型局部变量声明的一部分进行处理。
(3)对象初始化器和几何初始化器
1) 在.NET2.0中构造一个对象的方法是提供一个重载的构造函数,二是默认的构造函数生成一个对象,然后对其属性进行赋值,在.net3.5/C#3.0种我们有一种更好的方法来进行对象的初始化。那就是使用对象初始化器。这个特性也是匿名类的一个基础。
2) 基本用法:
LYSC_User user=new LYSC_User{ID=1,Name=”Kencery”,Age=22};
3) 举例说明:
List<Person>
list=new List<Person>{
new
Person{ID=’1’,Name=”Kencery”,Age=32},
new Person{ID=’1’,Name=”Kencery”,Age=32},
new Person{ID=’1’,Name=”Kencery”,Age=32}
};
4) 对象初始化器是利用了编译器对对象中的对外可见的字段或者属性进行按序赋值,在编译还是隐式的调用了构造函数,对字段或者属性的赋值可以是一个或者是多个。
(4) 匿名类
1) 有了前面对象初始化器的介绍,我们可以使用new{object initializer}或者new[]{object,…}来初始化一个匿名类或者不确定类型的数组,匿名类的对象需要使用var关键字声明:代码如下:
var user=new{ID=1,Name=”Kencery”,Age=”22”};
2) 应用场景,当直接使用select new{object initializer}这样的语法就是将一个Linq查询的结果返回到一个匿名类中
3) 将一组只读属性封装到单个对象中,而无需首先显示定义一个类型,类型名优编译器生成,并且不能在源代码级使用,每个属性的类型由编译器推断。
4) 用来初始化属性的表达式不能为null,匿名函数或者指针类型。
(5)Lambda表达式
1) “Lambda表达式”是一个匿名函数,它可以包含表达式和语句,可用于创建委托。
2) 运算符=>,该运算符读为”goes to”。
3) 格式:(input parameters)=>expression
4) 匿名函数的例子
delegate bool DelDemo(int a,int b);
DelDemo fun=delegate(int a,int a){return a>b;};
Console.WriteLine(fun(1,3));
Deledemo func=(int a,int b)=>a>b;
Console.WriteLine(func(1,2));
5)Lambda表达式的使用案例
List<string> strs = new List<string>() { "1","2","3","5" };
var data = strs.FindAll(strtemp => int.Parse(strtemp) > 2);
foreach (var item in data)
{
Console.WriteLine(item);
}
2.上面的是准备知识,下面开始实体框架的简介
(1) 简称EF。
(2)ADO.NET Entity Framework是微软以ADO.NET为基础所发展出来的对象关系对应(O/R Mapping)解决方案,早期被称为ObjectSpace。
(3)实体框架Entity Framework是ADO.NET中的一组支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架。
3.什么是O/R Mapping
(1) 广义上,ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。
(2) 狭义上,ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。理想情况下,基于这样一个面向对象的接口,持久化一个OO对象应该不需要了解任何关系型数据库存储数据的实现细节。
(4) 在EF中的实体数据模型(EDM)由以下三种模型和具有相应文件扩展名的映射文件进行定义
1) 概念架构定义语言文件(.csdl) 定义概念模型
2) 存储架构定义语言文件(.ssdl) 定义存储模型(又称为逻辑模型o)
3) 映射规范语言文件(.msl) 定义存储模型与概念模型之间的映射 M
(5) 实体框架使用基于XML的模型和映射文件将概念模型中的实体和关系的创建,读取,更新和删除操作转换为数据源中的等效操作,EDM支持将概念模型中的实体映射到数据源中的存储过程。