zoukankan      html  css  js  c++  java
  • 一步一步学EF系列四【升级篇 实体与数据库的映射】

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

          先看一下之前的配置类

          截图

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

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

    大家也可以加入QQ群进行交流(435498053)。轻松做生意外贸软件

    作者:STONE刘先生 出处:http://www.cnblogs.com/liupeng/

    本文版权归作者和博客园共有,欢迎转载。未经作者同意下,必须在文章页面明显标出原文链接及作者,否则保留追究法律责任的权利。
    如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】按钮,因为你的支持是我继续写作,分享的最大动力!

          具体的内容往下看:


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

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

    image

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

    image

    三、核心代码来了

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

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

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

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

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

        调到下面这个

    image

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

    四、最后一步

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

      截图

    五、完成

    运行你的代码 是不是也是出现了之前的正确页面。

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

    大家也可以加入QQ群进行交流(435498053)。轻松做生意外贸软件

    作者:STONE刘先生 出处:http://www.cnblogs.com/liupeng/

    本文版权归作者和博客园共有,欢迎转载。未经作者同意下,必须在文章页面明显标出原文链接及作者,否则保留追究法律责任的权利。
    如果您认为这篇文章还不错或者有所收获,可以点击右下角的【推荐】按钮,因为你的支持是我继续写作,分享的最大动力!

  • 相关阅读:
    Xcode8中Swift3.0适配问题
    Swift3.0语法变化
    一起聊聊 Swift 3.0
    Swift 3.0 的 open,public,internal,fileprivate,private 关键字
    leetcode先刷_Binary Tree Level Order Traversal II
    java + memcached安装
    POJ 2533-Longest Ordered Subsequence(DP)
    网络协议——IP
    使用百度地图——入门
    取消延时功能
  • 原文地址:https://www.cnblogs.com/liupeng/p/4797367.html
Copyright © 2011-2022 走看看