广告
返回顶部
首页 > 资讯 > 精选 >ADO.NET Entity Framework继承的三种形式分别是什么
  • 746
分享到

ADO.NET Entity Framework继承的三种形式分别是什么

2023-06-17 22:06:55 746人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关ADO.net Entity Framework继承的三种形式分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。继承在各种编程中应用很多,但是ADO.NET

这篇文章将为大家详细讲解有关ADO.net Entity Framework继承的三种形式分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

继承在各种编程中应用很多,但是ADO.NET Entity Framework继承还存在一定程度的不足,很可能出现映射错误,必须手工来维护EDMX中的MSL部分。

ADO.NET Entity Framework继承(以下简称ADO.NET EF)有一个非常可信的运行时。之所以不敢在项目中广泛使用是因为其糟糕的设计时。这个DSL设计时糟糕在哪里呢?其一,只能是先设计好数据库后设计实体模型;其二,如果你修改了数据库结构,再更新实体模型时,你所做的修改全部作废,最糟糕的是,很可能会出现映射错误,你必须手工来维护EDMX中的MSL部分。通常数据库结构的修改会成为你的噩梦。

还必须指出一点,ADO.NET Entity Framework继承在MSDN中的文档是有问题的。不信你看我的发现:MSDN,微软怎么会这样啊?

不得不承认,ADO.NET Entity Framework继承的运行时对继承关系的处理是非常让人舒服的。本文带你去体验一下ADO.NET EF的继承。

与通常的继承关系映射一样,支持三种方式:

◆一体系一表方式

◆一类一表方式

◆一具体类一表方式

对于***种方式和第三种方式,我是非常不屑的。我有文章讲过我的看法:细说继承关系映射。

***种方式有一篇文章已经讲了具体的操作方式:Single Table Inheritance in Entity Framework。这种方式有什么问题呢?那个“Type”字段我们是可以接受的,因为在运行时这个字段完全是透明的;但是那个“Salary”、“Rate”和“Hours”可以为空,这个我们不能接受,因为这意味着例如我们存贮一个SalariedExployee实体,可以堂而皇之地不给Salary赋值,而导致业务错误。这便是我所反感的“可空冗余”。不过凡事都有例外,如果派生类中的属性刚好都是可空的,那这个可空就不冗余了,而单表继承简单高效的好处就可以坐收了。

第三种方式我是无法接受的,因为根本解决不了我多次提到的“关系共享”的问题。

还好,ADO.NET EF提供了***的第二种方式支持。有文章讲这个方式:

Entity Framework Modeling : Entity Splitting

Entity Framework Modeling: Entity Splitting Part II

不过,我没有按这篇文章所提示的方式设置成功,也许我的环境不同。重要的是,我明白了设置继承的几个要点:***,不要手工修改BaseType来设置继承,而是要用上下文菜单中的“添加”→“继承”的方式。我们于是相信,除了BaseType以外,ADO.NET EF的DSL为EDMX中的MSL部分加入了某些内容。第二,手工删除派生类中的关键字段属性。第三,注意操作顺序。

现在用一个实例来说明。这个例子用于解决关于权限的问题。业务系统对权限的判断仅根据其是否拥有某个“权柄”。这个权柄用一个字符串表示在Privilege表中。这个权柄只可以授予给角色。用户和用户组都可以隶属于某个角色,用户组中的用户可以从该用户组继承所有的角色。实际上的应用可能会在权柄上再做一些文章,例如加上权柄作用域对象。这与本主题没有关系,就此省略。

下图是数据库的设计:

ADO.NET Entity Framework继承的三种形式分别是什么

在Visual Studio 2008中建立一个类库项目。新增一个名叫“InheritanceDemoModel.edmx”的实体数据模型,并从建立好的数据库生成,把实体连接设置命名为“DemoEntities”。于是,得到这个最初的成果:

ADO.NET Entity Framework继承的三种形式分别是什么

先删除UserOrGroup和User之间的关系,再删除UserOrGroup与Group之间的关系,然后把所有的实体集名称改成复数。

现在加入两个继承关系:一个是UserOrGroup为基,Group为派生;另一个是UserOrGroup为基,User为派生。然后,变成这样:

ADO.NET Entity Framework继承的三种形式分别是什么

下一步,先把UserOrGroup的“抽象”属性改为“true”,再删除User的UserId属性和Group的GroupId属性。删除这两个属性以后,要分别把原来的两个字段(Column)映射到UserOrGroup的Id字段:

ADO.NET Entity Framework继承的三种形式分别是什么

ADO.NET Entity Framework继承的三种形式分别是什么

***一步,由于删除了User的UserId属性和Group的GroupId属性,Group的Users属性和User的Groups属性映射被破坏了,需要重新映射:

ADO.NET Entity Framework继承的三种形式分别是什么

保存,完成映射。接下来可以做几个测试,例如,测试分别创建几个Privilege、Role、Group、User,然后用一个简单的Linq表达式来获取某个User所有的权柄。

关于ADO.NET Entity Framework继承的三种形式分别是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: ADO.NET Entity Framework继承的三种形式分别是什么

本文链接: https://www.lsjlt.com/news/293839.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ADO.NET Entity Framework继承的三种形式分别是什么
    这篇文章将为大家详细讲解有关ADO.NET Entity Framework继承的三种形式分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。继承在各种编程中应用很多,但是ADO.NET...
    99+
    2023-06-17
  • FMDB使用的数据库的三种形式分别是什么
    今天就跟大家聊聊有关FMDB使用的数据库的三种形式分别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。FMDB是iOS平台下一款优秀的第三方SQLite数据库框架。它以Objec...
    99+
    2023-06-04
  • php中fpm的三种模式分别是什么
    这篇文章主要介绍“php中fpm的三种模式分别是什么”,在日常操作中,相信很多人在php中fpm的三种模式分别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php中fpm的三种模式分别是什么”的疑惑有所...
    99+
    2023-06-20
  • redis的三种启动方式分别是什么
    小编给大家分享一下redis的三种启动方式分别是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!redis有三种启动方式,分别是:直接启动、使用redis启动脚本设置开机自启动、通过指定...
    99+
    2022-10-18
  • 亚马逊账号分类的三种形式是什么
    注册类型:亚马逊为卖家提供多种类型的账号,包括个人账号、商业账号、企业账号等。 品牌注册:品牌是亚马逊平台上的商家标识,只有在亚马逊授权的情况下才可以使用。品牌注册可以让商家获得品牌所有权和管理权,以及品牌形象维护和推广的支持。 自营商品...
    99+
    2023-10-27
    亚马逊 三种 账号
  • JavaScript中创建对象的三种方式分别是什么
    JavaScript中创建对象的三种方式分别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Javascript中的一切几乎都是对象,...
    99+
    2022-10-19
  • Spring中接口注入的三种方式分别是什么
    本篇文章为大家展示了Spring中接口注入的三种方式分别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Spring中 接口注入的三种方式,上面的代码中,ClassA依赖于Interf...
    99+
    2023-06-17
  • JavaScript实现JS弹窗的三种方式分别是什么
    这期内容当中小编将会给大家带来有关JavaScript实现JS弹窗的三种方式分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、前言html和css的学习大致完成,我们进入重要的JavaScrip...
    99+
    2023-06-26
  • SAP Fiori应用的三种部署方式分别是什么
    本篇文章为大家展示了SAP Fiori应用的三种部署方式分别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。封面图片来自Google搜索,关键字: Fiori Deployment方式1 On ...
    99+
    2023-06-04
  • 实现ABAP条件断点的三种方式分别是什么
    这篇文章给大家介绍实现ABAP条件断点的三种方式分别是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。ABAP条件断点这个话题,Jerry的同事曾经问过我,虽然小但很实用。所谓条件断点,就是设置在某行语句上的断点,并...
    99+
    2023-06-04
  • 进入Win7安全模式的三种方法分别是什么
    这期内容当中小编将会给大家带来有关进入Win7安全模式的三种方法分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。方法一、开机按F8键进入1、我们在重启或者电脑开机的时候,在进入Windows系统启...
    99+
    2023-06-05
  • MySQL中有三种删除数据的方式分别是什么
    小编给大家分享一下MySQL中有三种删除数据的方式分别是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在 MySQL 中有三...
    99+
    2022-10-18
  • struts2文件上传采用的三种方式分别是什么
    本篇文章给大家分享的是有关struts2文件上传采用的三种方式分别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。文件上传几乎是每个项目实现的一个必须的模块。上传就是将信息...
    99+
    2023-06-17
  • Linux单点登录的三种实现方式分别是什么
    小编今天带大家了解Linux单点登录的三种实现方式分别是什么,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“Linux单点登录的三种实...
    99+
    2023-06-28
  • Android统一依赖管理的三种方式分别是什么
    这篇文章将为大家详细讲解有关Android统一依赖管理的三种方式分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。简述每个项目从新建开始我们或多或少都会导入各种依赖库,如果项目中只有一...
    99+
    2023-06-29
  • 使用javascript解析二维码的三种方式分别是什么
    使用javascript解析二维码的三种方式分别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、使用javascript解析二维码1、二维码是什么二维码就是将我们能...
    99+
    2023-06-25
  • HTTP协议中需要知道的三种数据格式分别是什么
    今天就跟大家聊聊有关HTTP协议中需要知道的三种数据格式分别是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。实习中的一个主要工作就是分析 HTT...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作