一、关于ORM
ORM的概念:
对象关系映射(Object Relationsl Mapping,简称ORM,或O/RM,或O/R mapping),是一种技术,用于实现面向对象编程语言里不同类型系统数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
ORM的优势:实现快速开发,方便移植数据库。
.NET开发中的ORM框架:
NHibernate 、MyBatis.NET 、LINQ to SQL(已经不再使用) 、 ADO.NET Entity Framework
下面是ORM的工作原理图:
二、下面是Entity-Framework体系结构总览:
三、Entity Client与ADO.NET
Entity Client(实体代理)概念及作用:
概念:Entity Framework实现了一套类似与ADO.NET中的数据库操作类,这些操作类成为Entity Client。
作用:用来操作EDM(实体数据模型)
Entity Client与ADO.NET对比:
ADO.NET的连接类型是向数据库发送SQL命令操作表或视图,Entity Client是向EDM发送Entity SQL。
Entity Client通过Entity Connectim 、Entity Command等类进行模拟ADO.NET,有自己的SQL语句。
Entity Client将查询转交给数据库提供者ADO.NET Provider,并由数据库提供者翻译位SQL语句。
ADO.NET Provider:
作用:翻译成SQL语句,用来访问数据库。
说明:Entity Framewok是ADO.NET的一个技术子集。
下面是工作原理图:
注意:我们是通过EntityClient操作CSDLàMSLàSSDLàADO.NETProvideràDatabase;
四、基于Entity Framework实现增、删、查、改 代码例子:
1、增:
static void Main(string[] args)
{
Students objStudent = new Students()
{
StudentName = "张良",
Age = 18,
Gender = "男",
PhoneNumber = 13600709394
};
EFDBEntities efdb = new EFDBEntities();
efdb.Students.Add(objStudent);
int result = efdb.SaveChanges();
Console.Writeline(result);
Console.ReadLine();
}
2、删除:
static void Main(string[] args)
{
//创建数据库上下文对象
EFDBEntities efdb = new EFDBEntities();
Students objStudent = efdb.Students.FirstOrDefault(s => s.StudentId == 100015);
//从集合中删除对象
efdb.Students.Remove(objStudent);
int result = efdb.SaveChanges();
Console.Writeline(result);
Console.ReadLine();
}
3、查询:
static void Main(string[] args)
{
//创建数据库上下文对象
EFDBEntities efdb = new EFDBEntities();
//首先找到要修改的对象
IQueryable<Students> query = efdb.Students.Where(s => s.StudentId > 100015);
foreach(var item in query)
{
Console.Writeline("{0}\t{1}\t{2}",item.StudentId, item.StudentName,item.Age);
}
Console.ReadLine();
}
4、修改:
static void Main(string[] args)
{
//创建数据库上下文对象
EFDBEntities efdb = new EFDBEntities();
//首先找到要修改的对象
Students objStudent = efdb.Students.FirtOrDefault(s => s.StudentId == 100015);
//在此写修改各个属性值
objStudent.StudentName = "张红利";
objStudent.Age = 20;
int result = efdb.SaveChanges();
Console.Writeline(result);
Console.ReadLine();
}