• 企业应用开发中.NET EF常用哪种模式?


    前言

    本篇文章来源于微信技术群小伙伴的提问,在企业应用开发中.NET ORM EF常用哪种模式进行开发?今天我们一起来了解一下EF开发的三种模式。

    EF/EF Core介绍

    Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术,EF Core 是适用于 .NET 的现代对象数据库映射器。它支持 LINQ 查询、更改跟踪、更新和架构迁移。EF Core 通过提供程序插件 API 与 SQL Server、Azure SQL 数据库、SQLite、Azure Cosmos DB、MySQL、PostgreSQL 和其他数据库一起使用。(微软官方出品)。

    官方文档教程:https://docs.microsoft.com/zh-cn/ef/

    GitHub地址:https://github.com/dotnet/efcore

    .NET ORM如何选择?

    假如你到现在还不知道该选择哪种ORM来进行.NET应用的开发,不妨先看看下面的这两篇文章,相信对你会有所帮助。

    EF开发的三种模式

    这三种模式都是用于定义和管理数据模型的方式,但是它们的实现方式不同,适用于不同的场景。

    1. 代码优先模式(Code First)
    2. 数据库优先模式(Database First)
    3. 模型优先模式(Model First)

    代码优先模式(Code First)

    代码优先模式是指先编写对于数据库表的实体类和数据库上下文类,然后通过 EF 工具根据代码创建表、生成数据库表结构、映射文件等。

    优点

    1. 这种模式适用于开发人员更习惯于使用代码管理数据模型的场景,同时也能够更灵活地定义数据模型。
    2. EF提供了自动迁移功能,能够根据实体类的变化自动更新数据库结构,简化了数据库迭代开发的过程。

    缺点

    当数据模型发生变化时,开发人员还需要手动修改代码并执行数据迁移操作。因此,在一些情况下,代码工作可能会相对繁琐,特别是在处理复杂的数据模型或频繁变更的情况下。

    数据库优先模式(Database First)

    数据库优先模式是指首先要创建好数据库,然后将使用 Visual Studio 中包含的实体框架设计器来创建模型(项目=>添加新项=>从左侧菜单中选择“数据”,然后选择“ADO.NET 实体数据模型”=>实体数据模型向导(添加数据库访问地址)=>选择“从数据库生成”,然后单击“下一步”),最后生成EDMX 文件(.edmx 扩展名)。

    优点

    1. 通过已有的数据库结构快速生成数据模型,减少了手动编写模型类的时间和工作量,加快了开发速度。
    2. 适用于已有数据库的项目,无需从头设计数据模型,便于与现有数据库进行集成开发。
    3. 当数据库结构发生变化时,可以通过更新数据模型来保持模型与数据库的一致性,方便维护。

    缺点

    1. 自动生成的模型类可能包含过多的属性和关联,导致模型类过于庞大和复杂,不利于维护和理解。
    2. 自动生成的模型类可能并不是最优化的数据访问方式,可能导致性能上的一些问题,需要额外优化。

    模型优先模式(Model First)

    模型优先模式介于数据库优先模式和代码优先模式两者之间(结合体)。在模型优先模式中,首先定义实体数据模型(选择“空模型”并单击“完成”),然后通过该模型生成数据库结构。

    优点

    使用可视化工具,开发人员可以直观地设计数据模型,通过拖放和配置属性来定义实体和关系,从而提高开发效率。

    缺点

    操作步骤比较繁琐,对于复杂的数据模型,使用可视化工具进行设计和管理可能会变得困难。当模型变得庞大和复杂时,可视化工具的性能和易用性可能会受到影响。

    最后总结

    上面通过对EF三种开发模式的简单概述,可以看出代码优先模式(Code First)和数据库优先模式(Database First)是比较适合企业应用开发的,因为这两种方式更符合我们实际开发的使用模式。那么具体用哪一种,这就需要根据你自己项目的复杂度和团队使用习惯来衡量了,假如你有不同的见解欢迎留言。

    DotNetGuide技术社区交流群

    • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目推荐、招聘资讯和解决问题的平台。
    • 在这个社区中,开发者们可以分享自己的技术文章、项目经验、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
    • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值和成长机会。

    欢迎加入DotNetGuide技术社区微信交流群👪

  • 相关阅读:
    OSS数据处理
    lego-loam 跑 kitti00包(kitti2bag+lego-loam+evo)详细版
    一次做数据报表的踩坑经历,让我领略了数据同步增量和全量的区别
    如何在非spring环境中调用service中的方法
    第七章认识Express框架
    ASP.NET Mvc+FFmpeg+Video实现视频转码
    国产工业软件之CAE软件的现状与展望----工业软件讲坛第十一次讲座
    好看的货架效果(含3D效果)
    高斯推断推导
    23、基于51单片机的三路超声波测距系统(Proteus仿真+程序+设计报告)
  • 原文地址:https://www.cnblogs.com/Can-daydayup/p/17900287.html