在Entity Framework 4中映射现有实体类(POCO)

  Entity Framework的全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框架。

  Entity Framework的主要特点:

  1. 支持多种数据库(Microsoft SQL Server, Oracle, and DB2);

  2. 强劲的映射引擎,能很好地支持存储过程;

  3. 提供Visual Studio集成工具,进行可视化操作;

  4. 能够与ASP.NET, WPF, WCF, WCF Data Services进行很好的集成。

  更多简介,请看:ADO.NET Entity Framework At-a-Glance

  在博客园新版短消息功能开发中,我们准备用Entity Framework 4,我们首先面临这样的问题:

  实体类与数据库都已经存在,而且实体类的类名与数据库中的表名,类的属性与表中对应的字段名称不同。也就是说我们不能使用通常的方法在VS2010中通过ADO.NET Entity Data Model(.edmx文件)生成实体类与ObjectContext。

  注:这个实体类有个称呼叫POCO(Plain Old CLR Objects)。

  我们解决方法是:在.edmx文件中手动配置映射关系。

  下面是操作步骤:

  1. 使用ADO.NET Entity Data Model,在VS2010创建一个.edmx文件,如下图:

  2. 根据Entity Data Model Wizard进行操作,在选择数据库表的窗口中,注意在Model Namespace输入框中输入现有实体类的命名空间,如下图:

  3. 点击Finish,生成相应的EntityType,如下图:

  这里的EntityType是根据数据库中的表结构生成的,与实际的实体类是不一样的,表名与类名不一样,表的很多字段与类的属性不一样。

  下面我们配置映射的关键地方:

  4. 点击.edmx窗口点击空白处,在属性窗口中将Code Generation Strategy的属性设置为None(见下图),也就是不让VS2010自动生成实体类和对应的ObjectContext。

  5. 继续在.edmx窗口,选择实体类,点击右键选择Show in Model Browser,见下图:

  6. 进入Model Browser窗口,见下图:

  上图中,上面是实体类(这里是VS2010自动生成的,与数据库表是一一对应的),下面是表结构。

  修改映射就是在这里:在Entity Types中将类名改为实际的实体类名,将属性改为实际的属性,如下图:

  修改之后,映射就配置好了,.edmx文件中实体类图中也随之自动更改,见下图:

  7. .edmx文件实际就是一个xml文件,映射信息就存放在其中。在VS2010解决方案管理器中选择这个文件,右键Open With,选择用XML Editor打开,就可以看到.edmx文件的内容,如下图:

  8. 再写个继承自ObjectContext的类(见下图),工作就完成了。

时间: 2024-10-27 14:44:10

在Entity Framework 4中映射现有实体类(POCO)的相关文章

一起谈.NET技术,在Entity Framework 4中映射现有实体类(POCO)

Entity Framework的全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框架. Entity Framework的主要特点: 1. 支持多种数据库(Microsoft SQL Server, Oracle, and DB2): 2. 强劲的映射引擎,能很好地支持存储过程: 3. 提供Visual Studio集成工具,进行可视化操作: 4. 能够与ASP.NET, WPF, WCF, W

在Entity“.NET研究” Framework 4中映射现有实体类(POCO)

Entity Framework的全称是ADO.NET Entity Framework,是微软开发的基于ADO.NET的ORM(Object/Relational Mapping)框架. Entity Framework的主要特点: 1. 支持多种数据库(Microsoft SQL Server, Oracle, and DB2): 2. 强劲的映射引擎,能很好地支持存储过程: 3. 提供Visual Studio集成工具,进行可视化操作: 4. 能够与ASP.NET, WPF, WCF, W

ADO.NET Entity Framework 4中枚举的使用

  本文将通过ADO.NET Entity Framework 4中枚举的使用介绍,带领大家走进ADO.NET的世界. 枚举(Enum)是一种常用的类型,如用于表示状态.类型等参数.但目前它不会被官方地在ADO.NET Entity Framework中进行支持.本文介绍的是通过复杂类型(Complex Types)在ADO.NET Entity Framework 4中使用枚举. 这种方法需要使用POCO类,而不能使用Visual Studio自动生成的类.因为我们需要手动为复杂类型编写代码.

在ADO.NET Entity Framework 4中使用枚举

枚举(Enum)是一种常用的类型,如用于表示状态.类型等参数.但目前它不 会被官方地在ADO.NET Entity Framework中进行支持.本文介绍的是通过复杂类 型(Complex Types)在ADO.NET Entity Framework 4中使用枚举. 这种方法需要使用POCO类,而不能使用Visual Studio自动生成的类.因为我 们需要手动为复杂类型编写代码. 数据库脚本: 1 if exists (select 1 2 from sysobjects 3 where i

java中什么是实体类,为什么实体类的变量都用private修饰?

问题描述 java中什么是实体类,为什么实体类的变量都用private修饰? java中什么是实体类,为什么实体类的变量都用private修饰?能否举个实体类的简单例子,谢谢 解决方案 关于什么是实体类,可以看这里:Java什么是实体类实体类有什么用? 例如一个订单实体类Order.java,里边:id(主键).orderNo(订单号).userId(订单所属用户ID).status(支付状态).createTime(创建时间)等属性. 因为这些属性,基本都是供订单类自己使用的,所以一般都将它们

c#-编写一个方法(完成值修改),传递参数中是传递实体类好还是类的成员好

问题描述 编写一个方法(完成值修改),传递参数中是传递实体类好还是类的成员好 如题,假如有个类Letter{int a,int b,int c....int z}(假设有26个成员吧),我如果想写一个方法来改变某几个成员的值的时候,方法的参数是定义fun(Letter letter)好,还是定义fun(int a,int b,int c,...)几个我需要修改的成员好,方法体的功能是改变原有的值. 解决方案 各有各的好处,参数多,传实体类方便,参数少,传参方便. 解决方案二: 传实体类,或者传成

对于一个项目中的部分实体类不使用spring作为管理容器,也不使用注入方式来调用接口的话,如何手动处理实体类和调用接口?

问题描述 本人初学spring,对spring不甚了解.看到其他人做的web项目设计,说对action实体类不使用spring管理容器,也不使用注入方式来调用接口,手工处理.我想问大家的是,如果这样子的话,代码应该是怎样的方式?以下面这几个文件为例,使用spring管理实体类,并通过注入方式调用接口,现在是可以正常运行的,如果实现他说的这样,代码大致该如何修改呢?请大家详细指点,谢谢!!action类:packagecn.gth.test.view;importcn.gth.test.dao.I

Entity Framework 5.0系列之自动生成Code First代码

在前面的文章中我们提到Entity Framework的"Code First"模式也同样可以基于现有数据库进行开发.今天就让我们一起看一下使用Entity Framework Power Tools如何基于现有数据库生成数据类和数据库上下等. Entity Framework Power Tools 基于现有数据库生成POCO数据类和数据库上下文需要借助Visual Studio一个扩展插件-- Entity Framework Power Tools(一个Code First反向工

ASP.NET MVC4 音乐商店,Entity Framework 4.1 表名被自动转换成复数问题解决

 做ASP.NET MVC3 Music Store示例时,   EntityFramework4.1 下表名被自动转换成复数问题: 解决方案:    using System; using System.Collections.Generic; using System.Data.Entity; using ContosoUniversity.Models; using System.Data.Entity.ModelConfiguration.Conventions; namespace C