日期:2014-05-20  浏览次数:20878 次

Entity Framework 产生背景,CRUD操作实例,架构

1.产生背景:

     长久以来,程序设计师和数据库总是保持着一种微妙的关系,在商用应用程序中,数据库一定是不可或缺的元件,这让程序设计师一定要为了连接与访问数据库而去 学习 SQL 指令,因此在信息业中有很多人都在研究如何将程序设计模型和数据库集成在一起,对象关系对应 (Object-Relational Mapping) 的技术就是由此而生,像HibernateNHibernate都是这个技术下的产物,而微软虽然有了ADO.NET这 个数据访问的利器,但却没有像NHibernate这样的对象对应工具,因此微软在.NET Framework 2.0发展时期,就提出了一个ObjectSpace的概念,ObjectSpace可以让应用程序可以用完全对象化的方法连接与访问数据库,其技术概念 与NHibernate相当类似,然而ObjectSpace工程相当大,在.NET Framework 2.0完成时仍无法全部完成,因此微软将ObjectSpace纳入下一版本的.NET Framework中,并且再加上一个设计的工具(Designer),构成了现在的 ADO.NET Entity Framework。 

2.发展历程:

ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapping) 解决方案,早期被称为 ObjectSpace,现已经包含在 Visual Studio 2008 Service Pack 1 以及 .NET Framework 3.5 Service Pack 1 中发表。

用于支持开发人员通过对概念性应用程序模型编程(而不是直接对关系存储架构编程)来创建数据访问应用程序。目标是降低面向数据的应用程序所需的代码量并减轻维护工作。

4.主要模块和类:

概念层结构:概念层结构定义了对象模型 (Object Model),让上层的应用程序码可以如面向对象的方式般访问数据,概念层结构是由 CSDL (Conceptual Schema Definition Language) 所撰写。 

对应层结构:对应层结构负责将上层的概念层结构以及下层的储存体结构中的成员结合在一起,以确认数据的来源与流向。对应层结构是由 MSL (Mapping Specification Language) 所撰写。 

储存层结构:储存层结构是负责与数据库管理系统 (DBMS) 中的数据表做实体对应 (Physical Mapping),让数据可以输入正确的数据来源中,或者由正确的数据来源取出。它是由 SSDL (Storage Schema Definition Language) 所撰写 。

ObjectContext、ObjectQuery、ObjectStateEntryObjectStateManager

5.CURD经典应用代码:

创建用户 
public void Create(UserInfo info)
{
   using(StudyEntities entities = new StudyEntities())
   {
entities.AddToUserInfo(info);
entities.SaveChanges();
}
}

读取用户信息 
public   UserInfo Read(int userId)
{
    StudyEntities entities = new StudyEntities(); 
return entities.UserInfo.First<UserInfo>(item => item.UserID == userId); 
}

更新用户信息 
public void Update(UserInfo info)
{
using(StudyEntities entities = new StudyEntities())
{
UserInfo ui = entities.UserInfo.First<UserInfo>(item => item.UserID == info.UserID);
ui.Age = info.Age;
ui.Sex = info.Sex;
ui.UserName = info.UserName;
entities.SaveChanges();

}
}

 删除用户 
public void Delete(int userId)
{
using(StudyEntities entities = new StudyEntities())
{
UserInfo ui = entities.UserInfo.First<UserInfo>(item => item.UserID == userId);
entities.DeleteObject(ui);
entities.SaveChanges();
}
}