Entity Framework快速入门--CodeOnly POCO

前几篇文章我简单介绍了Entity Framework的概念以及介绍了Database First方式实例和Model First方式实例。今天我们将介绍另外一种令人兴奋的开发方式:CodeOnly!当然EF对于POCO(Plain Old CLR Object)的支持是EF4.0中的一大特性。也是EF可扩展性提高的一大进步。废话少说,也是简单给大家演示一下操作的步骤!先简单说一下流程,然后再看下面的截图!

流程:在EDMX设计器里设计 实体模型→根据实体编写相应的实体类代码→编写数据库访问接口网关→测试结果

那开始我们的EF POCO的旅行吧!

第一步:创建项目

第二步:设计实体模型

在项目上右击 添加新建项目 添加Ado.Net实体数据模型,选择通过空模型来创建。在实体模型设计器中,右击 属性设置实体模型的代码生成策略 :无,这一步的设置是为了不让EF自动帮我们生成实体类代码等,而是由我们自己来定义实体类的代码,这样灵活性更高,而且我们可以在实体类上做扩张更方便,可维护性也更高。设置如下图所示:

然后添加如下两个实体,如下图所示:

在这简单说明一下,两个实体之间有个一对多的关系,这个只需要我们在实体模型设计器中添加关联就可以了。

这一步做好之后,我们还是通过模型来生成数据库!【这里就不多说了,可以参考前面的文章】

第三步:根据设计好的实体编写对应的实体类

分别编写Department类、Car类。属性的名字要跟模型上的属性一样。 

Department类 代码如下:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EFPoco
{
public class Department
{
public int ID { get; set; }
public string Name { get; set; }
public string Master { get; set; }
public IList<Car> Car { get; set; }
}
}

Car类代码如下:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace EFPoco
{
public class Car
{
public int ID { get; set; }
public string Name { get; set; }
public int DepartmentID { get; set; }
public string Size { get; set; }
public Department Department { get; set; }//对应的外键关系
}
}

注意:绿色部分是跟其他代码有点区别,因为存在两个表的一(department)对多(car)的关系,所以在设计这个实体类的时候,car只能有一个Department对象的属性,而Department应该有一个car集合对象的属性。

另外就是实体类可以分别放置到其他的Assembly中,并不限制放置于EDMX的项目中!这个特性也是非常令人兴奋的!

第四步:创建数据库访问的网关

添加单独的数据库访问网关的类代码文件,添加如下代码:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects;

namespace EFPoco
{
public class CompanyContext : ObjectContext
{
//EF生成的连接字符串
private static string constr = System.Configuration.ConfigurationManager.ConnectionStrings["CompanyContainer"].ConnectionString;
public CompanyContext()
: base(constr, "CompanyContainer")//第一个参数是EF的链接字符串的Value,第二个是实体容器的名称,可以在实体设计器模型上右击属性里面找到,默认连接字符串的KEY也是容器的名字
{
departmentSet = CreateObjectSet<Department>();
carSet = CreateObjectSet<Car>();
}
private ObjectSet<Department> departmentSet;//定义Department表对应的ObjectSet的集合
public ObjectSet<Department> DepartmentSet
{
get { return departmentSet; }
set { departmentSet = value; }
}
private ObjectSet<Car> carSet;//定义Car表对应的ObjectSet的集合
public ObjectSet<Car> CarSet
{
get { return carSet; }
set { carSet = value; }
}
}
}

其实上面这段代码很简单,就是定义了一个继承ObjectContext的类,在此类中加了car和department实体的ObjectSet的集合。

这样我们所有的准备工作就作为了,下面就是来测试一下你的CodeOnly的结果...

第五步:测试你的成果




using (CompanyContext cc = new CompanyContext())
{
var result
= from c in cc.CarSet
select c;

foreach (var m in cc.CarSet)
{
Console.WriteLine(
string.Format("name:{0}| size:{1}\r\n", m.Name,m.Size);
}
}






最终运行正确!

总结一下:

我们并没有用EF自动生成的代码,只是使用了它的模型设计器,帮我们生成CSDL/MSL/SSDL的定义文件(xml).然后我们自己写实体类的代码,以及自己写一个数据库访问的网关ObjectContext!这样带给我们的惊喜是里程碑式的,我们可以在实体类上进行扩展,可以把它扩展成领域模型,而且代码更加灵活,并不受制于EF的自动生成!因为大家都知道,EF自动生成的代码有个弊端,首先就是不灵活,再有就是你在上面就行修改后,再用模型更新一下,就会把修改冲刷掉!这是很头痛的问题,但是有了POCO的支持,我们可以对实体类进行任意的扩展,以及对现有资源的整理,而且为后面的升级维护也提供了基础!

 

Entity Framework快速入门--索引贴

时间: 2024-08-02 12:09:33

Entity Framework快速入门--CodeOnly POCO的相关文章

Entity Framework快速入门--索引贴

此系列在不断完善中,希望能将我关于Entity Framework的知识总结整理到这里跟大家分享,也希望得到大家的指点!共同进步,共同提高!谢谢! Entity Framework快速入门 Entity Framework快速入门--实例篇 DatabaseFirst Entity Framework快速入门--IQueryable与IEnumberable的区别 Entity Framework快速入门--ModelFirst Entity Framework快速入门--CodeOnly PO

Entity Framework快速入门--直接修改(简要介绍ObjectContext处理机制)

在介绍Entity Framework的修改实体到数据库的方法之前呢,我们先简要的介绍一下ObjectContext的处理机制. 1.ObjectContext的处理机制 ObjectContext是Entity Framework封装了数据库访问的上下文,以及实体的映射关系元数据信息等.EF帮我们封装好了这么一个统一的接口.让我们所有的操作都只通过这个一个实体上下文就可以实现了增删查改等所有对应数据库的操作.当然,我们要了解EF的生成SQL的机制我们才能更好的使用EF帮我们生成效率更高的SQL

Entity Framework快速入门--ModelFirst

Entity Framework带给我们的不仅仅是操作上的方便,而且使用上也很是考虑了用户的友好交互,EF4.0与vs2010的完美融合也是我们选择它的一个理由吧.相比Nhibernate微软这方面做的的确是很不错. 下面我将使用CodeFirst方式来做个简单是实际例子与大家分享. 我们还是和 前面的文章 Entity Framework快速入门--实例篇一样,创建一个控制台项目. 第一步:创建控制台项目 第二步:在项目上右击添加Ado.Net 实体数据模型 如图所示: 第三步: 选择生成实体

Entity Framework快速入门--一对零到一关系处理

很久不更新blog了,正好趁着端午节的空,把之前一段时间使用关于EF以及工作上经验总结一下. 此文将跟朋友们分享一下关于1对0..1实体模型一些使用包括基本的添加和查询的注意事项. 首先我们EDMX实体模型: 模型很简单,一个用户的实体,另外关联了一个用户信息的实体.有些情况下我们会有这样的需求,用户登录身份验证,而每次再查询用户信息的时候,往往会去查询用户表,而这时候我们仅仅使用了2-3个字段也就是用户账号跟密码是否一致,如果一致就返回true,否则返回false,而我们往往在用户表上挂在很多

Entity Framework快速入门--实例篇 DatabaseFirst

在上一篇中我们简单了解的EF的定义和大体的情况,我们通过一步一步的做一个简单的实际例子来让大家对EF使用有个简单印象.好,废话少说,直入主题. 第一步:创建控制台项目 这个就不多说了,如果新建项目你还不知道,那先去学学基础吧. 第二步:创建实体模型 在项目上右击 添加新建项目→Ado.Net实体数据模型 如下图所示: 第三步:与现有的数据库进行连接生成EF实体 在做这步之前,首先确定你是否已经有现有数据库,当然在这提供我自己的数据库脚本. View Code -- ---------------

Entity Framework快速入门

实体框架(Entity Framework)简介 实体框架Entity Framework 是 ADO.NET 中的一组支持开发面向数据的软件应用程序的技术.是微软的一个ORM框架. ORM知识补充:什么是O/R Mapping? 广义上,ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换. 狭义上,ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口.理想情况下,基于这样一个面向对象的接口,持久化一个OO对象应该不需要要了解任何关系型数据库存储

Entity Framework快速入门--IQueryable与IEnumberable的区别

IEnumerable接口 公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代.也就是说:实现了此接口的object,就可以直接使用foreach遍历此object: IQueryable 接口 它继承 IEnumerable 接口,而因为.net版本加入Linq和IQueryable后,使得IEnumerable不再那么单调,变得更加强大和丰富. 为了区别两个接口,我们通过一个实际的例子来解释一下. 根据上篇随笔的实例,编写如下代码: static void Main(string[] a

【转】 .Net Micro Framework 快速入门

   .Net Micro Framework 快速入门 收藏  一.简介   Microsoft .NET Micro Framework 2001年由微软研究院开始研发,并随后在其MSN Direct项目中使用该技术,2007年9月微软对外发布2.0,2008年10月 V3.0.2009年11月 V4.0.2010年5月 V4.1 beta,2009年并入.NET产品组,Digi.Atmel.飞思卡尔等半导体公司都先后为其推出了开发板,该技术可以应用到远程控制.智能家电.教育类机器.医疗电子

Robot Framework 快速入门_中文版

目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变量 组织测试用例 测试套件 启动和卸载 使用标签 创建测试库       介绍 概述 Robot Framework 是一个关键词驱动的自动测试框架.测试用例位于HTML或者TSV(以tab分隔值)文件,使用在测试库中实现的关键词来在测试中运行程序.因为Robot Framework 是灵活和可扩展