学懂C#编程:常用框架学习(三)——.NET Framework框架下的Entity Framework (EF)开发应用详解

devtools/2024/10/20 11:44:27/

        

目录

一、Entity Framework概述

二、Entity Framework的核心组成部分

EF%BC%9A-toc" style="margin-left:40px;">Entity Data Model (EDM):

EF%BC%9A-toc" style="margin-left:40px;">Entity Client:

EF%BC%9A-toc" style="margin-left:40px;">Object Services:

EF%BC%9A-toc" style="margin-left:40px;">ADO.NET Provider:

三、分层结构

EF%BC%9A-toc" style="margin-left:40px;">应用程序层:

EF%BC%9A-toc" style="margin-left:40px;">Entity Framework层:

EF%BC%9A-toc" style="margin-left:40px;">数据库层:

EF%20%E4%B8%BB%E8%A6%81%E7%9A%84%E5%8A%9F%E8%83%BD%E5%8C%85%E6%8B%AC-toc" style="margin-left:0px;">四、EF 主要的功能包括

五、三种开发模式详解

EF%BC%88Code%20First%EF%BC%89-toc" style="margin-left:40px;">1. 代码优先(Code First)

EF%BC%88Database%20First%EF%BC%89-toc" style="margin-left:40px;">2. 数据库优先(Database First)

EF%BC%88Model%20First%EF%BC%89-toc" style="margin-left:40px;">3. 模型优先(Model First)

六、总结


Entity Framework (EF) 是一个开源的对象关系映射 (ORM) 框架,它可以使 .NET 开发者能够使用 LINQ 查询关系型数据库,并且可以在 .NET 对象和数据库间转换数据。EF 提供了一种高级的抽象,让开发者不需要直接编写 SQL 查询和处理数据转换

        EF支持三种主要的开发模式:代码优先(Code First)、数据库优先(Database First)和模型优先(Model First)。下面将结合实际案例,详细讲解这三种模式,帮助初学者轻松理解和掌握。

一、Entity Framework概述

Entity Framework通过提供一组丰富的API和工具,使得数据访问层的开发变得更加简单和高效。它支持多种数据库系统,如SQL Server、MySQL、Oracle等,并允许开发人员使用LINQ(Language Integrated Query)来查询和操作数据。

二、Entity Framework的核心组成部分

  1. EF%BC%9A">Entity Data Model (EDM)

    • 概念层(CSDL, Conceptual Schema Definition Language):定义了应用程序中的实体和它们之间的关系,这些实体对应于数据库中的表或视图。CSDL是EDM的“灵魂”部分,它用实体类表示数据库中的对象。
    • 存储层(SSDL, Store Schema Definition Language):描述了数据库的实际结构,包括表、列、关系、主键及索引等。SSDL将数据库中的对象信息加载到EF中,并描述数据库对象的结构信息。
    • 映射层(MSL, Mapping Specification Language):负责将概念层(CSDL)与存储层(SSDL)进行映射,确保应用程序中的实体能够正确地映射到数据库中的表或视图。

    这些部分通常以XML格式定义,并存储在.edmx文件中,该文件是EF实现ORM的关键配置文件。

  2. EF%BC%9A">Entity Client

    • Entity Client是EF提供的一套类似于ADO.NET的数据库操作类,它主要用于操作EDM。与ADO.NET直接向数据库发送SQL命令不同,Entity Client是向EDM发送Entity SQL(EF特有的SQL方言),然后由EF将其转换为数据库可理解的SQL语句。
  3. EF%BC%9A">Object Services

    • Object Services提供了丰富的API,允许开发人员以面向对象的方式操作数据。这些API隐藏了底层数据库操作的复杂性,使得开发人员可以更加专注于业务逻辑的实现。
  4. EF%BC%9A">ADO.NET Provider

    • ADO.NET Provider是EF与数据库之间的桥梁,它负责将Entity Client的操作命令翻译为数据库的SQL语句,并执行这些语句。Microsoft默认实现了对SQL Server的ADO.NET Provider,但也可以通过其他数据库厂商提供的插件来支持其他数据库。

三、分层结构

从逻辑上讲,EF框架的分层结构可以归纳为以下几个层次:

  1. EF%BC%9A">应用程序层

    • 开发人员在这一层编写业务逻辑代码,通过EF提供的API来操作数据。这些API以面向对象的方式封装了数据库操作,使得开发人员可以像操作普通对象一样操作数据库中的数据。
  2. EF%BC%9A">Entity Framework层

    • 这一层是EF框架的核心,它包含了EDM、Entity Client、Object Services等关键组成部分。EF层负责将应用程序层的请求转换为数据库可理解的SQL语句,并将执行结果返回给应用程序层。
  3. EF%BC%9A">数据库层

    • 数据库层是实际存储数据的地方,它可以是任何支持ADO.NET的关系型数据库。ADO.NET Provider负责将EF层生成的SQL语句发送到数据库层执行,并将执行结果返回给EF层。

EF%20%E4%B8%BB%E8%A6%81%E7%9A%84%E5%8A%9F%E8%83%BD%E5%8C%85%E6%8B%AC">四、EF 主要的功能包括

  • 通过 LINQ 查询数据
  • 跟踪对象的状态变化并将这些变化持久化到数据库
  • 支持事务处理
  • 支持数据库迁移,即可以根据模型变化自动更新数据库结构。

五、三种开发模式详解

EF%BC%88Code%20First%EF%BC%89">1. 代码优先(Code First)

核心思想:先编写实体类和数据上下文(DbContext),然后根据这些代码生成数据库。

适用场景:适用于新项目,或对数据库结构有完全控制权的情况。

实际案例

假设我们要开发一个简单的博客系统,包含作者(Author)和文章(Post)两个实体。

1)定义实体类

public class Author  
{  public int AuthorId { get; set; }  public string Name { get; set; }  
}  public class Post  
{  public int PostId { get; set; }  public string Title { get; set; }  public string Content { get; set; }  public int AuthorId { get; set; }  public Author Author { get; set; }  
}

2)定义数据上下文

public class BlogContext : DbContext  
{  public DbSet<Author> Authors { get; set; }  public DbSet<Post> Posts { get; set; }  protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)  {  optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=BlogDb;Trusted_Connection=True;");  }  
}

3)使用迁移生成数据库

在Visual Studio中,通过Package Manager Console运行以下命令:

Enable-Migrations  
Add-Migration InitialCreate  
Update-Database

这些命令会生成数据库迁移文件,并根据迁移文件创建数据库。 

EF%BC%88Database%20First%EF%BC%89">2. 数据库优先(Database First)

核心思想:从现有数据库生成实体类和映射文件,然后在此基础上进行开发。

适用场景:适用于已有数据库的情况,如维护现有系统或集成第三方数据库。

实际案例

假设我们有一个现成的数据库,包含Authors和Posts两个表。

EF%BC%88Model%20First%EF%BC%89">3. 模型优先(Model First)

核心思想:先设计数据模型,然后根据模型生成数据库。

适用场景:适用于从零开始设计数据模型的情况,或需要高度定制数据库结构的情况。

实际案例

 1)在Visual Studio中设计模型

          通过添加“ADO.NET Entity Data Model”项,选择“空模型”,并使用设计器添加实体和关系。   2)生成数据库脚本

           设计完成后,右键点击模型图,选择“生成数据库脚本”,将生成的SQL脚本在数据库中执行,以创建数据库和表。

3)使用生成的实体类进行数据操作

     与Database First类似,Model First也生成了实体类,可以直接在代码中使用。

  1. 使用Entity Framework Power Tools或dotnet ef工具生成模型

    在Visual Studio中,可以通过添加“ADO.NET Entity Data Model”项,并选择“从数据库生成模型”来生成实体类和映射文件。或者使用dotnet ef工具:

    dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=ExistingDb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models

  2. 这将根据数据库中的表生成相应的实体类和DbContext。

  3. 使用生成的实体类进行数据操作

    生成的实体类可以直接在代码中使用,进行CRUD操作。

六、总结

Entity Framework的三种开发模式各有优缺点和适用场景。Code First模式提供了最大的灵活性,适合新项目或对数据库结构有完全控制权的情况;Database First模式适用于已有数据库的情况,可以快速生成实体类和映射文件;Model First模式则适用于从零开始设计数据模型的情况。根据项目的具体需求选择合适的开发模式


http://www.ppmy.cn/devtools/59344.html

相关文章

学懂C#编程:常用框架学习(二)——初学者如何学习WPF之MVVM模式

学习WPF的MVVM模式作为初学者可能会觉得有些抽象&#xff0c;但不用担心&#xff0c;让我们一步步来&#xff0c;用容易理解的方式讲解&#xff1a; 1. 理解基本概念 Model&#xff08;模型&#xff09;&#xff1a;想象这是你的数据仓库&#xff0c;存放着所有你需要展示或者…

【VUE】10、VUE项目中多环境管理使用

在 Vue 项目中&#xff0c;实现多环境管理&#xff08;如开发环境、测试环境、生产环境&#xff09;通常涉及到配置不同的环境变量和构建设置。Vue CLI 提供了一种简单而强大的方式来管理这些环境。以下是实现多环境管理的详细步骤&#xff1a; 1、创建环境文件 在 Vue CLI 项…

Spring Boot集成Activity7实现简单的审批流

由于客户对于系统里的一些新增数据&#xff0c;例如照片墙、照片等&#xff0c;想实现上级逐级审批通过才可见的效果&#xff0c;于是引入了Acitivity7工作流技术来实现&#xff0c;本文是对实现过程的介绍讲解&#xff0c;由于我是中途交接前同事的这块需求&#xff0c;所以具…

如何在Linux上部署Ruby on Rails应用程序

在Linux上部署Ruby on Rails应用程序是一个相对复杂的过程&#xff0c;需要按照一系列步骤进行。下面是一个基本的部署过程&#xff0c;涵盖了从安装所需软件到部署应用程序的所有步骤。 安装必要的软件 在部署Ruby on Rails应用程序之前&#xff0c;需要确保Linux系统上安装了…

C/C++高性能网络库libhv

libhv 是一个高性能的 C/C 网络库框架&#xff0c;专为构建高并发、低延迟的网络应用程序而设计。它主要针对服务器端的网络编程&#xff0c;提供了异步I/O、事件驱动、多路复用等机制&#xff0c;以支持大规模的并发连接和高效的网络通信。 主要特点&#xff1a; 高性能&…

libcoap3对接华为云平台

文章目录 前言一、平台注册二、引入源码库1.libcoap仓库编译2.分析网络报文3.案例代码4.编译&运行 总结 前言 通过libcoap3开源代码库对接华为云平台&#xff0c;本文章将讨论加密与不加密的方式对接华为云平台。 一、平台注册 首先&#xff0c;你需要在华为云平台上创建…

文件安全传输系统,如何保障信创环境下数据的安全传输?

文件安全传输系统是一套旨在保护数据在传输过程中的安全性和完整性的技术或解决方案。通常包括以下几个关键组件&#xff1a; 加密&#xff1a;使用强加密算法来确保文件在传输过程中不被未授权访问。 身份验证&#xff1a;确保只有授权用户才能访问或传输文件。 完整性校验…

甘肃美食于兰洽会数智电商馆展现魅力

在近日盛大开幕的兰洽会上&#xff0c;数智电商馆成为了备受瞩目的焦点&#xff0c;而甘肃平凉的特产更是在其中大放异彩。 平凉&#xff0c;这座拥有深厚历史文化底蕴的城市&#xff0c;带着其独具特色的物产走进了兰洽会的舞台。走进数智电商馆&#xff0c;首先映入眼帘的便是…