Entity Framework4.0 (一)概述(EF4 的Database First方法)
2011-12-15 23:47
239 查看
Entity Framework4.0(以后简称:EF4),是Microsoft的一款ORM(Object-Relation-Mapping)框架。同其它ORM(如,NHibernate,Hibernate)一样,一是为了使开发人员以操作对象的方式去操作关系型数据表。二是为了屏蔽底层不同厂商的数据库,开发人员面向ORM框架编写数据的CRUD(Create,Retrieve,Update,Delete)操作,再由ORM框架将这些操作翻译成不同数据库厂商的方言。
EF4较之前的版本有了很大的改观:
POCO(Plain Old CLR Objects)的支持:可以对含有业务逻辑的业务对象进行持久化、跟踪、状态管理等。
模型驱动开发:EF4提供三种方案:(1)先建立数据库与数据表,由数据库中的表生成业务模型。(2)先用设计器设计业务模型,由业务模型生成数据表。(3)纯代码的方式,不用设计器,而是自己实现接口与类,用以和数据库进行映射。这里的模型驱动就是指方案(2)。
关联对象的延迟加载:在以前的版本中不支持通过导航属性去自动加载关联对象,要使用include(),或显示Load()才可以。而在EF4中支持通过导航属性,去自动加载相关联的对象。
函数化调用数据库存储过程与自定义函数:数据库中的存储过程和自定义函数可以映射成ObjectContext对象的方法,在程序中直接调用。
自定义代码生成所且的模板与生成过程:EF4与T4结合使用可以控制生成代码的模板。EF4与WF(Windows Work Flow)结合使用可以控制生成代码的过程。
默认情况下:实体集采用复数,实体采用单数命名的形式:以前版本中实体集与实体的名字相同,让人感觉到困惑。现在EF4解决了这个bug。
复杂属性:如果一个属性只有一项内容,我们称该属性为标量属性(Scalar Property)。如果一个属性由多个标量属性组合而成,我们称组合以后的属性为复杂属性。如果一个实体中有复杂属性。在映射到数据表中时,则该复杂属性内部的每一个标量属性都会映射成一个独立的字段。
在“概述”部分,我会用三篇博文简单演示使用EF4创建应用的方法。目的就为了先给大家展示EF4的一个整体形象,避免过于关注细节,而看不清其全貌。博客园里我看到已经有许多讲EF4的博文,讲得都很好。但我觉得讲得有点太深入了,而且知识点过度有些陡峭了:不利于EF4新手理解和学习。国内也没有EF4的相关书籍可供大家细致地学习参考。所以,我就尽量写一些对大家有用的、简单的、过渡性的博文。避开晦涩难改的技术术语,让大家快速入门,然后在具体使用中自己深入研究。
EF4支持三种构建方法:1. Database First方法。2.Model First方法。3.Code First 方法。开发人员可根据具体的项目情况,选择任一种方法。为了尽量把每种方法的详细步骤讲述连贯,前三篇博文暂不深入解释。我会在后续章节中逐步展开和深入EF4的内部机理和相关知识。
好了,不多说了。下面言归正传。这次我们就简单演示下:1. Database First方法。
=========================================================================
我们创建一个简单的Windows Form的小示例:以Northwind数据库为例。
首先,创建EFDemo windForm Application . 如下图:
lboxCategory_SelectedIndexChanged
简单的概述下EF4,先这样吧?实在是顶不住了,要休息了。。。
EF4较之前的版本有了很大的改观:
POCO(Plain Old CLR Objects)的支持:可以对含有业务逻辑的业务对象进行持久化、跟踪、状态管理等。
模型驱动开发:EF4提供三种方案:(1)先建立数据库与数据表,由数据库中的表生成业务模型。(2)先用设计器设计业务模型,由业务模型生成数据表。(3)纯代码的方式,不用设计器,而是自己实现接口与类,用以和数据库进行映射。这里的模型驱动就是指方案(2)。
关联对象的延迟加载:在以前的版本中不支持通过导航属性去自动加载关联对象,要使用include(),或显示Load()才可以。而在EF4中支持通过导航属性,去自动加载相关联的对象。
函数化调用数据库存储过程与自定义函数:数据库中的存储过程和自定义函数可以映射成ObjectContext对象的方法,在程序中直接调用。
自定义代码生成所且的模板与生成过程:EF4与T4结合使用可以控制生成代码的模板。EF4与WF(Windows Work Flow)结合使用可以控制生成代码的过程。
默认情况下:实体集采用复数,实体采用单数命名的形式:以前版本中实体集与实体的名字相同,让人感觉到困惑。现在EF4解决了这个bug。
复杂属性:如果一个属性只有一项内容,我们称该属性为标量属性(Scalar Property)。如果一个属性由多个标量属性组合而成,我们称组合以后的属性为复杂属性。如果一个实体中有复杂属性。在映射到数据表中时,则该复杂属性内部的每一个标量属性都会映射成一个独立的字段。
在“概述”部分,我会用三篇博文简单演示使用EF4创建应用的方法。目的就为了先给大家展示EF4的一个整体形象,避免过于关注细节,而看不清其全貌。博客园里我看到已经有许多讲EF4的博文,讲得都很好。但我觉得讲得有点太深入了,而且知识点过度有些陡峭了:不利于EF4新手理解和学习。国内也没有EF4的相关书籍可供大家细致地学习参考。所以,我就尽量写一些对大家有用的、简单的、过渡性的博文。避开晦涩难改的技术术语,让大家快速入门,然后在具体使用中自己深入研究。
EF4支持三种构建方法:1. Database First方法。2.Model First方法。3.Code First 方法。开发人员可根据具体的项目情况,选择任一种方法。为了尽量把每种方法的详细步骤讲述连贯,前三篇博文暂不深入解释。我会在后续章节中逐步展开和深入EF4的内部机理和相关知识。
好了,不多说了。下面言归正传。这次我们就简单演示下:1. Database First方法。
=========================================================================
我们创建一个简单的Windows Form的小示例:以Northwind数据库为例。
首先,创建EFDemo windForm Application . 如下图:
lboxCategory_SelectedIndexChanged
// 方法一:我们使用循环遍历查询结果的集合元素,然后添加到控制中。 //this.lboxProduct.Items.Clear(); //if (this.lboxCategory.SelectedItem != null) //{ // string categoryName = this.lboxCategory.SelectedItem.ToString(); // 这次直接使用CategoryName作筛选条件,需要使用连接(join),因为Product中只包含有CategoryID,而没有CategoryName。 // using (NorthwindEntities context = new NorthwindEntities()) // { // var products = from product in context.Products // join category in context.Categories on product.CategoryID equals category.CategoryID // where category.CategoryName == categoryName // select new { product.ProductName }; // foreach (var p in products) // { // this.lboxProduct.Items.Add(p.ProductName); // } // } //} // 方法二:该方法是指定数据源的方式。不须要用 this.lboxProduct.Items.Clear(); if (this.lboxCategory.SelectedValue != null) { // 得到类别ID号 int categoryID = Convert.ToInt32(this.lboxCategory.SelectedValue.ToString()); // 这次直接使用CategoryID作筛选条件,不需要使用连接(join),因为Product中包含有CategoryID。 using (NorthwindEntities context = new NorthwindEntities()) { var products = from product in context.Products where product.CategoryID == categoryID select new { product.ProductName }; // 注意:给控制指定数据源的时候,对DataSource的赋值语句要在DisplayMember和ValueMember赋值之后, // 否则,DisplayMember和ValueMember的赋值不生效。 this.lboxProduct.DisplayMember = "ProductName"; this.lboxProduct.DataSource = products; } }
简单的概述下EF4,先这样吧?实在是顶不住了,要休息了。。。
相关文章推荐
- Entity Framework4.0 (一)概述(EF4 的Database First方法)
- Entity Framework4.0 (一)概述(EF4 的Database First方法)(转)
- Entity Framework4.0 (一)概述(EF4 的Database First方法)
- Entity Framework4.0 (二)概述(EF4 的Model First 方法)
- Entity Framework4.0 (三)概述(EF4 的Code First方法)
- Entity Framework(EF的Database First方法)
- Entity Framework4.0 (二)概述(EF4 的Model First 方法)(转)
- Entity Framework4.0 (二)概述(EF4 的Model First 方法)
- Entity Framework4.0 (三)概述(EF4 的Code First方法)(转)
- Entity Framework4.0 (二)概述(EF4 的Model First 方法)
- Entity Framework4.0 (三)概述(EF4 的Code First方法)
- vs+mysql+ef配置方法
- TDD与VTDD系列(五):提升产能1/3的开发方法:VTDD(概述)
- 日志分析方法概述
- Entity Framework 学习高级篇—改善EF代码的方法
- 简单概述JQuery的几种过滤方法
- EF Power Tools参数不正确的解决方法
- 文献搜索方法概述
- VS2012里面使用EF框架的增删改查和分页的方法
- JAVA基础再回首(十六)——泛型的概述、使用、泛型类、泛型方法、泛型接口、泛型高级(通配符)