热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一步一步学EF系列【4、升级篇实体与数据库的映射】

之前的三张为基础篇,如果不考虑架构问题,做一般的小程序,以足够用了。基本的增删改查也都有了。但是作为学习显然是不够的。通过之前三章的学习,有没有发现这样写有什么问题,有没有觉得繁琐

     之前的三张为基础篇,如果不考虑架构问题,做一般的小程序,以足够用了。基本的增删改查也都有了。但是作为学习显然是不够的。通过之前三章的学习,有没有发现这样写有什么问题,有没有觉得繁琐的?可能有人会说,之前的三篇总共加起来代码也就几十行哪里繁琐了。呵呵,是不是觉得EF很强大。但是其实按照之前的写法的话是比较繁琐的,为什么呢?这就是本文的重点 接着往下看!!!

      先看一下之前的配置类

      技术分享

      回顾我们的范例是只有两张表,然后需要配置映射关系的时候在 DbContext,的OnModelCreating进行配置。但是如果有几十张而且关系比较复杂的表,如果到放到这个OnModelCreating里面去写的话会不会觉得太乱没有条理性,甚至关系都已经分不清了。

    

      那接着就要想办法,怎么能让每个表的关系就只在一个实体关系配置类进行配置。

      具体的内容往下看


       上面的内容不知道你看懂了没有,或者说我说的不清楚,解决办法就是 我们可以针对每个实体来创建一个配置类或者公用的配置类来完成关系映射的设置。那我们就开始做吧。

1、在Model下面新建了一个配置文件夹

技术分享

2、同时针对之前写的两个实体新建了一个配置类

技术分享

3、核心代码来了。

    以上两步动动鼠标就可以搞定。那具体的代码就在这里了。我们先来看看用户信息的映射类。

/// 
    /// 博客用户信息映射类
    /// 
    public class BlogUserConfiguration : EntityTypeConfiguration
    {
        public BlogUserConfiguration()
        {
            //设置主键
            HasKey(m => m.BlogUserId);
        } 
    }

    简单吧! 我们把之前OnModelCreating配置的东西就可以移到每个对应的实体中,这个类核心的地方就在于引用了EntityTypeConfiguration那为什么要引用它呢?

    下面的这句是我们第二篇里面写的代码,你鼠标放到HasKey查看引用。

modelBuilder.Entity().HasKey(m => m.BlogUserId);

    调到下面这个

技术分享

    现在知道为什么要引用EntityTypeConfiguration吧! 不引用的话 那我们在构造方法里面的配置就没法写了。

4、最后一步,修改DbContext里面的OnModelCreating方法 注释掉之前的代码。每个类改成一行代码实现。

  技术分享

5、完成,运行你的代码 是不是也是出现了之前的正确页面。

大家如果有什么不懂的可以留言,也欢迎大家指导通过进步。

一步一步学EF系列【4、升级篇 实体与数据库的映射】


推荐阅读
  • diskmark使用教程
    首先说明一下软件各个参数的意义。1~9测试次数;50MB~4000MB测试规模;C,D,E,F选择测试对象;ALL测试以下所有;第一行代表你硬盘的读写速度。第二行代表你硬盘4K文件 ... [详细]
  • PICT初探索
    pict用于测试用例的生成,非常高效。也非常方便。安装完成后主要程序就一个exe文件。需要通过cmd命令行进入pict文件夹。建立测试用例文件然后使用简单的命令行生成测试用例也可以 ... [详细]
  • iOS Auto Layout Demystify
    BookDescripterAutoLayouttransformsthewayyoucreateiOSuserinterfaces.Asflexibleasitispowerfu ... [详细]
  • python+selenium+chrome网页自动化测试:1、在pycharm中安装selenium:file-setting-projectinterpreter中搜索sele ... [详细]
  • python 解决多张相同的excel取某一些数据合同到一张EXCEL
    这样的表单有几百张把姓名和从事专业类别代码的值取出合并到一张总表里importpandasaspdimportos#第一步读取文件储存在是s列表中pathD:001#文件夹目录fi ... [详细]
  • 用户管理_用户管理的小项目
      之前学习链表数据结构的时候,写过(相信很多人都做过)dos窗口版的学生管理系统,通过输入数字来实现CURD学生的信息,顶多就是把数据写入文件来存储数据 ... [详细]
  • 内存暴增排查分析
    一次偶然间,发现测试环境iis站点内存突然间暴增,平常都是300M,这次一下子暴增到8g于是就开始了接下来的分析发现Dictionary居然有1.78g懵逼windbg分析1.看看 ... [详细]
  • 1011-MarriageCeremoniesPDF(English)StatisticsForumTimeLimit:2second(s)MemoryLimit:32MBYouw ... [详细]
  • 726:ROADS726:ROADS总时间限制:1000ms内存限制:65536kB描述Ncitiesnamedwithnumbers1Nareconnectedwithon ... [详细]
  • #usernobody;worker_processes1;#error_loglogserror.log;#error_loglogserror.lognotice;#error ... [详细]
  • #include#includeintmain(){printf(floorof2.3is%d\n,(int)floor(2.3));printf(floorof ... [详细]
  • re正则表达式1.什么是正则?正则就是用一系列具有特殊含义的字符组成的规则,该规则用来描述具有某一特征的字符串。正则就是用来在一个大的字符串匹配出符合规则的子字符串2.为什么用正则 ... [详细]
  • 串口初始化D8120说明:※根据MD320的通讯协议,无帧头和帧尾,则(bit9,bit8)(0,0)。※bit13~15是计算机链接通讯时的设定项目,使用RS指令时必须设定为0。 ... [详细]
  • iometer 1.1.0 重要特性说明之Write IO Data Pattern
    iometer1.1.0版本包含了3种WriteIODataPattern。分别是:Repeatingbytes、Pseudo-Random(2006.07.27及其之前的版本默认 ... [详细]
  • 关于初学PHP时的知识积累总结【PHP】
    后端开发|php教程PHP,知识积累后端开发-php教程PHP基础A、初识PHPPHP是与HTML混合使用的嵌入式语言。1、PHP标记默认标记短标记,需在php.ini中将shor ... [详细]
author-avatar
mobiledu2502911073
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有