我们经常使用数据表中的类别字段来分辨所存记录的类型,在对象场景下,我们一般会将其演化为有继承关系的一组对象,以符合面向对象的设计和使用,那么我们在Entity Framework环境中如何来实现这样的实体关系呢?这里将通过一些例子,来说明一般场景下的使用方式。

场景一:数据表Peoples记录了一些人,每个人都有唯一的工作类别,在该场景下,我们需要按照工作类别来构建一组对象,使得人根据工作类别进行了分类。
首先创建数据表如图:

填充数据如下:

[假设我们只对人进行四种分类(演员、商人、程序员、运动员)]

现在我们使用VS2008从数据库创建PeopleModel.edmx模型,如图:

VS2008自动为我们创建了一个实体People,但是我们在这个场景下,需要有一个依据工作类别区分的对象层次,因此我们加入新的实体Actor(演员), Businessman(商人), Developer(程序员), Sporter(运动员) 他们都继承自People(创建实体时,指定其基类型为People), 如图:

创建后,我们得到了如下的模型:

现在,我们从People实体中删除JobCategory的映射,因为我们需要使用JobCategory来区别People的子类,而不是作为People的属性。设置People实体为抽象的(我们假设每一个人都有工作,呵呵)。

然后,使用VS2008中的"映射详细信息"视图,为每个子类设置其映射的表和条件。

每个子类都类似修改完毕后,我们的模型就大功告成了。
1 <EntityType Name="Peoples">
2           <Key>
3             <PropertyRef Name="PeopleID" />
4           </Key>
5           <Property Name="PeopleID" Type="nvarchar" Nullable="false" MaxLength="50" />
6           <Property Name="PeopleName" Type="nvarchar" Nullable="false" MaxLength="50" />
7           <Property Name="JobCategory" Type="nvarchar" Nullable="false" MaxLength="50" StoreGeneratedPattern="Computed"/>
8         </EntityType>

下面我们就可以通过代码来验证我们的模型了。

Code
class Program
    {
        public static void Main(string[] args)
        {
            QueryDevelopers();
            Console.ReadLine();
        }

private static void QueryDevelopers()
        {
            using (var context = new PeopleEntities())
            {
                var query = from c in context.Peoples
                            where c is Developer
                            select c;
                foreach(var c in query)
                {
                    Console.WriteLine("Actor Name : {0}", c.PeopleName);
                }

}
        }
    }

class Program
    {
        public static void Main(string[] args)
        {
            QueryDevelopers();
            Console.ReadLine();
        }

private static void QueryDevelopers()
        {
            using (var context = new PeopleEntities())
            {
                var query = from c in context.Peoples
                            where c is Developer
                            select c;
                foreach(var c in query)
                {
                    Console.WriteLine("Actor Name : {0}", c.PeopleName);
                }

}
        }
    }

转载于:https://www.cnblogs.com/crossingdawn/archive/2009/07/23/1529225.html

Entity Framework -- 使用类别字段的实体继承关系相关推荐

  1. Entity Framework默认值字段不起作用解决方法

    Entity Framework默认值字段不起作用解决方法 参考文章: (1)Entity Framework默认值字段不起作用解决方法 (2)https://www.cnblogs.com/fox- ...

  2. Entity Framework入门教程:创建实体数据模型

    下图为一个已经创建好的数据库表关系 实体数据模型的创建过程 在Visual Studio项目中,右键程序集菜单,选择[添加]->[新建项],在[添加新项窗口]中选择[ADO.NET实体数据模型] ...

  3. mysql ado.net 实体数据模型_Visual Studio2017中如何让Entity Framework工具【ADO.NET实体数据模型】支持MYSQL数据源...

    熟悉Entity Framework应该对以下图片不陌生,他就是ADO.NET实体数据模型向导:可以将数据库的表自动生成模型类,或者创建Code First的模型文件. 但是这个模型向导默认只显示微软 ...

  4. ADO.NET Entity Framework如何:手动配置实体框架项目

    如果在 Visual Studio 项目中使用实体数据模型向导,该向导将自动生成 .edmx 文件并将该项目配置为使用实体框架.有关更多信息,请参见 如何:使用实体数据模型向导(实体框架). 也可以手 ...

  5. ADO.NET Entity Framework建模和映射(实体框架)

    在实体框架中,可以采用最适合您应用程序的方式定义概念模型.存储模型以及这两种模型之间的映射.使用 Visual Studio 中的实体数据模型工具,可以从数据库或图形模型创建一个 . edmx 文件, ...

  6. .net core Entity Framework 与 EF Core

    重点讲 Entity Framework Core ! (一)Entity Framework 它是适用于.NET 的对象关系映射程序 (ORM),现在的EF6已经是久经沙场,并经历重重磨难,获得一致 ...

  7. [(转)hystar整理]Entity Framework 教程

    预备知识    2 LINQ技术    2 LINQ技术的基础 - C#3.0    2 自动属性    2 隐式类型    2 对象初始化器与集合初始化器    3 匿名类    3 扩展方法    ...

  8. [hystar整理]Entity Framework 教程

    目录 预备知识    2 LINQ技术    2 LINQ技术的基础 - C#3.0    2 自动属性    2 隐式类型    2 对象初始化器与集合初始化器    3 匿名类    3 扩展方法 ...

  9. Entity Framework Core 生成跟踪列

    注意:我使用的是 Entity Framework Core 2.0 (2.0.0-preview2-final).正式版发布时,功能可能存在变动. 当您设计数据库时,有时需要添加列以跟踪记录何时更改 ...

最新文章

  1. 如何使用OpenCV实现图像均衡???
  2. 2019 ACM - ICPC 全国邀请赛(南昌) 题解(9 / 12)
  3. Linux:让普通用户临时性获得root用户权限
  4. oracle约束的相关总结
  5. struts配置访问后缀为.do,.action,.*
  6. vantweapp中的SwipeCell踩坑
  7. 根据sessionId获取Session对象
  8. 使用Underscore.js的template将Backbone.js的js代码和html代码分离
  9. 程序阻碍OD调试的方式2
  10. 协同过滤推荐算法java_协同过滤推荐算法的原理及实现
  11. 追梦App系列博客——后端架构篇
  12. git查看历史记录及修改内容
  13. 何谓Palm size-PC及Pocket PC?
  14. 查看linux Mac地址
  15. 创建电子邮件链接 mailto
  16. 开源搜索引擎 种子搜索_使用开源搜索引擎自定义您的互联网
  17. 普通文本el-tootip超出宽度自动显示省略号,悬停显示
  18. awk从入门到入土(19)awk扩展插件,让awk如虎添翼
  19. 生物信息学python常用脚本_生物信息学一些基本的常用软件有哪些?
  20. 计算机的发展史英语作文,A History of Modern Computing-现代计算机历史 (英文原版)

热门文章

  1. 【引用】在VB6.0中实现弹出式菜单的几种方法
  2. linux命令-locale字符显示
  3. .Net学习(三):初识ASP.Net
  4. 全球首个AI协同及大数据安全标准正在制定,创新工场参与推进
  5. 百度李彦宏:自动驾驶最后一公里率先到来;未来20年手机依赖会降低
  6. 刚刚,Facebook开源了星际争霸AI代码
  7. 罗永浩推出新一代坚果手机,比AI亮眼的是AV能力
  8. 微信小程序,自动滑动到页面底部功能
  9. 21-hadoop-weibo推送广告
  10. 如何最快的获取QQ群所有成员的qq号信息