首页 > 其他分享 >【WPF】EF下CodeFirst、DBFirst与ModelFirst分析

【WPF】EF下CodeFirst、DBFirst与ModelFirst分析

时间:2022-10-21 14:02:41浏览次数:41  
标签:CodeFirst Code ModelFirst 数据库 EF Model 代码 First

通过项目,我们了解到EF框架有三种数据持久化的方式,也就是标题中我所提到的三种。那么这些方式之间又有什么联系和区别呢?
    篇幅原因,本篇博客不再分别介绍每种方法如何实现的了,大家用的时候可以去Sou~一下。
    先分别介绍一下这三种方法的联系:
    1.Database First是基于已存在的数据库,利用某些工具(如VS提供的EF设计器)创建实体类,数据库对象与实体类的匹配关系等,你也可以手动修改这些自动生成的代码及匹配文件。也就是从一个数据库开始,然后生成实体框架和相应代码。
    2.Model First 是先利用某些工具(如VS的EF设计器)设计出可视化的实体数据模型及他们之间的关系,然后再根据这些实体、关系去生成数据库对象及相关代码文件。
    3.Code First 这种方式需要先写一些代码,如实体对象,数据关系等,然后根据已有的代码描述,自动创建数据对象。但其实这种方法与Model First是非常类似的。我们自己写的代码,其实就是用代码表示实体模型,而Model First是用可视化的方式描述了实体模型。

    下面分析这三种方式的优缺点:

        Code-First模式:EF到EFCore都是大力支持的,必须用 Code First 只有这样才能真正的抛弃数据库的概念 完全实现面向对象开发。 优点是性能比较好,且代码较少冗余。不过它的缺点也有很多,由于都是代码编写的,比如更新数据库。Code First则是适应当今敏捷开发而生,快速通过编写代码实现功能,而不必过多关心数据库的设计;同时可以快速迭代,不用来回维护EDMX和DB耽误时间。
        Database-First模式:明显性能会差点,但是它很适合初学者,或者是比较急的小型项目。还有一点,我们在做项目时可能不容易体会到它的好处,但如果做数据库结构比较成熟稳定的产品时,我们可以很轻松的使用数据库生成实体模型,从而实现快速开发。
        Model-First模式:基本淘汰不用了 ,优点是开发人员能够在模型设计完成后,可以利用VS等工具快速生成数据库脚本。缺点是设计模型时完全了解数据库的结构,在模型中手动添加表关系,并且生成的脚本有点不简洁。 

    这三种方式各有利弊,使用过程中我们要按实际需求来选择。这些工具的出现和使用,大大提高了开发人员的开发速度,使得数据库、模型等出现了复用、扩展的可能,在应对变化方面也做了足够的工作。这些工具所体现的服务思想更提醒我们要全方位去考虑问题,在产品中做好应对变化的措施。

标签:CodeFirst,Code,ModelFirst,数据库,EF,Model,代码,First
From: https://www.cnblogs.com/cdaniu/p/16813220.html

相关文章

  • Codeforces Round #762 (Div. 3) E
    E.MEXandIncrements我们一看数据n个数还要计算n+1一个mex显然不能暴力我们考虑后面的i可以由前面的贪心的做一次操作转移过来所以我们记录一个a数组放着多出来的......
  • 【WPF】EFCore 6.0生成SQLite实体对象
    EFCore-DBFirst方式生成SQLite实体对象环境vs2022+.net6.0+控制台+sqlite3,控制台可以生存实体;但是在Wpf中无法生存实体(不知道具体原因)。DBFirst采用FluentAPI来......
  • 关于js中window.location.href,location.href,parent.location.href,top.location.hre
      关于js中"window.location.href"、"location.href"、"parent.location.href"、"top.location.href"的用法   "window.location.href"、"location.href"是本页面跳转......
  • Codeforces1695 D1.+D2 Tree Queries
    题意给一个n个点的无向图,其中有一个隐藏点X,可以进行一组询问S来确定S是n个节点中的哪个点。S包括k个询问节点。询问返回的值也为k个值,每个值为X点到每个询问节点的最短路......
  • Educational Codeforces Round 138 (Rated for Div. 2)
    比赛链接EducationalCodeforcesRound138(RatedforDiv.2)D.CountingArrays解题思路容斥原理显然\([1,1,\dots,1]\)是一组方案,直接求不好求解,考虑反面,对于......
  • efinance
    1、安装库pipinstallefinance2、查看已安装库的清单piplist3、查看数据3.1分钟、15分钟、小时、2小时数据(不能超过120分钟,即2小时)importefinanceaseffrequen......
  • drools_06_stateless_vs_stateful
    06_stateless_vs_statefulstatelesssession适用场景:适合一次启动规则引擎完成全量fact的计算,它不支持增量计算.execution()方法通常传入一个对象清单,要计算的......
  • sentinel运行报错问题处理:Unable to make protected final java.lang.Class java.lan
    使用命令:java-jarsentinel-dashboard-1.8.3.jar启动后异常情况如下java.lang.IllegalStateException:Cannotloadconfigurationclass:com.alibaba.csp.sentinel.das......
  • defaultdict创建字典
    因为字典的hash性所以key一定是唯一的-在创建字典的时候可以想象它的可以做到的事情是,unique后对数据分类或统计-但是字典中有多少唯一的值并不确定-此时引入default......
  • 1.2 Defining Computer Architecture
    GenuineComputerArchitecture:DesigningtheOrganizationandHardwaretoMeetGoalsandFunctionalRequirements.真正的计算机体系结构:设计组织和硬件以满足目标......