C# ORM框架-Entity Framework Core

Entity Framework Core(简称EF Core)是一个现代的、跨平台的、开源的对象关系映射(ORM)框架,由微软开发。它允许.NET开发者通过.NET对象与关系型数据库进行交互,而无需编写大部分的数据访问代码,极大地简化了数据访问的过程。以下是关于EF Core的详细概念和原理介绍:

一、概念

1. ORM框架

  • ORM(Object-Relational Mapping)框架是一种程序设计技术,用于实现编程语言中的对象模型与数据库中的关系模型之间的映射。EF Core正是这种技术的实现,它将数据库中的表、行、列等关系型数据结构映射为编程语言中的类、对象、属性等面向对象的数据结构。

2. 跨平台与开源

  • EF Core支持多种.NET实现和操作系统,包括.NET Core、.NET Framework、Xamarin、Universal Windows Platform (UWP)以及.NET Standard。这意味着开发者可以在不同的平台和环境中使用EF Core进行数据库操作。
  • EF Core是开源的,其源代码托管在GitHub上,允许开发者查看、修改和贡献代码。

3. 数据访问自动化

  • EF Core可以自动将LINQ(Language Integrated Query)查询转换为SQL命令,使得数据访问更加直观和简单。开发者只需要使用LINQ编写查询语句,EF Core就会将其转换为相应的SQL语句并执行,然后将结果返回给开发者。

二、原理

1. 实体与数据库表的映射

  • EF Core通过实体类(Entity Class)与数据库表之间的映射关系,将数据库中的表映射为编程语言中的类,将表中的行映射为类的实例,将列映射为类的属性。这种映射关系是通过EF Core的模型构建器(ModelBuilder)或数据注解(Data Annotations)来配置的。

2. 上下文(DbContext)

  • DbContext是EF Core中的一个核心概念,它代表了与数据库的会话(Session)和缓存(Cache)。DbContext包含了与数据库交互所需的所有信息,包括数据库连接字符串、实体类型、数据库迁移信息等。开发者通过DbContext来执行数据库查询、插入、更新和删除等操作。

3. 变更跟踪(Change Tracking)

  • EF Core通过变更跟踪机制来自动跟踪实体状态的变化。当开发者对实体实例的属性进行修改时,EF Core会自动将这些变化记录下来,并在执行SaveChanges()方法时将这些变化同步到数据库中。这种机制极大地简化了数据更新的过程,使得开发者无需手动编写更新语句。

4. 延迟加载与立即加载

  • EF Core支持两种数据加载方式:延迟加载(Lazy Loading)和立即加载(Eager Loading)。延迟加载是在访问导航属性时自动从数据库中加载相关数据,而立即加载则是在执行查询时一次性加载所有相关数据。开发者可以根据实际需求选择合适的加载方式。

以下是一个简单的示例,演示如何在一个.NET Core(或.NET 5/6/等更高版本)控制台应用程序中配置Entity Framework Core。

首先,确保你的项目中已经安装了Entity Framework Core NuGet包。你可以通过NuGet包管理器或.csproj文件来安装。对于Entity Framework Core 5.0,你可以在.csproj文件中添加如下依赖项:

<ItemGroup>
  <PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.0" />
  <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.0" /> <!-- 如果你使用的是SQL Server -->
  <!-- 对于其他数据库,请相应地添加适当的提供程序包,例如MySql.EntityFrameworkCore等 -->
</ItemGroup>

接下来,我们定义一个简单的实体类(Model)和数据库上下文(DbContext)类。

实体类(Model)

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    // 假设每个Blog有多个Posts
    public List<Post> Posts { get; set; }
}

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

    // 外键指向Blog
    public int BlogId { get; set; }
    public Blog Blog { get; set; }
}

数据库上下文(DbContext)

using Microsoft.EntityFrameworkCore;

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        // 这里配置了连接到本地SQL Server的字符串
        // 请根据实际情况调整连接字符串
        optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        // 在这里可以配置模型,例如Fluent API
        modelBuilder.Entity<Blog>()
            .HasMany(b => b.Posts)
            .WithOne(p => p.Blog)
            .HasForeignKey(p => p.BlogId);
    }
}

OnConfiguring 方法中的数据库连接字符串仅用于演示目的,并假定你正在使用SQL Server LocalDB。你应该根据自己的数据库配置来修改这个连接字符串。

在实际应用中,你可能会在Startup.cs(对于ASP.NET Core应用程序)或程序的入口点(对于控制台应用程序)中配置DbContext,而不是直接在DbContext类中配置。

对于控制台应用程序,你可能想要将数据库配置移动到Main方法或另一个初始化方法中,以避免在DbContext类中硬编码数据库连接字符串。这可以通过使用依赖注入(DI)或简单地在应用程序启动时创建DbContext实例并传递连接字符串来实现。上述示例提供了直接在DbContext中配置数据库连接的基本方法。

相关推荐

  1. 【ASP.NET COREEntityFrameworkCore 数据迁移

    2024-07-22 01:30:06       62 阅读
  2. .NET Core 中的 ORM 框架对比

    2024-07-22 01:30:06       38 阅读
  3. C# ORM框架-Entity Framework Core

    2024-07-22 01:30:06       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 01:30:06       169 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 01:30:06       185 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 01:30:06       155 阅读
  4. Python语言-面向对象

    2024-07-22 01:30:06       169 阅读

热门阅读

  1. vue排序

    2024-07-22 01:30:06       33 阅读
  2. 项目架构图的最佳实践:绘制、维护与示例

    2024-07-22 01:30:06       44 阅读
  3. C++多态

    C++多态

    2024-07-22 01:30:06      37 阅读
  4. Nginx 不转发请求 IP

    2024-07-22 01:30:06       37 阅读
  5. ctfshow web AK杯

    2024-07-22 01:30:06       37 阅读
  6. 正态分布是什么

    2024-07-22 01:30:06       34 阅读