如何使用Entity Framework查询Mysql数据库 并实现多表联查

🍀简介

Entity Framework Core (EF Core) 是一种轻量级、可扩展、开源且跨平台的对象关系映射(O/RM)框架,专为 .NET 平台设计。以下是 EF Core 的一些关键特点:

  1. 多数据库支持:EF Core 支持多种数据库引擎,包括 SQL Server、MySQL、PostgreSQL、SQLite 等,使得开发者可以根据项目需求选择合适的数据库系统。
  2. 简化数据访问:它允许 .NET 开发者使用 .NET 对象来处理数据库数据,大多数情况下无需编写传统的数据访问代码(如 SQL 或其他查询语句),从而简化了数据访问层的开发工作。
  3. 模型、查询与数据保存:EF Core 提供了创建数据模型、执行查询和保存数据的功能。开发者可以通过定义 .NET 类和属性来构建数据模型,然后使用 LINQ(语言集成查询)来查询数据,以及通过 SaveChanges 方法来保存对数据的更改。
  4. 易于安装和使用:EF Core 可以通过 NuGet 包轻松安装和更新。开发者需要在项目中安装 Microsoft.EntityFrameworkCore 包以及相应的数据库提供程序包,即可开始使用 EF Core。

🍀演示

在下面案例中我们通过依赖注入的方式,使用ORM工具Entity Framework查询Mysql数据库中的数据,并实现多表联查

假设我们有一个user用户表,其中occupationid对应的就是下面职业表中的id

 职业表Occupations

 

 现在我们需要查出用户的职业是什么,在MySQL中我们可以通过LEFT JOIN实现多表查询。如下sql语句。

SELECT name,opname FROM Users 
LEFT JOIN Occupations ON Users.opid = Occupations.id

 如果想要在EFCore中完成这种需求应该怎么操作呢。

🍀安装nuget包

分别安装如下两个nuget包,具体版本要参考自己实际的MySQL版本

NuGet\Install-Package Microsoft.Extensions.Hosting -Version 8.0.0
NuGet\Install-Package Pomelo.EntityFrameworkCore.MySql -Version 7.0.0

🍀创建上下文类

首先创建一个继承自 DbContext 的上下文类,使用DbSet 属性来表示数据库中的表

public class MyContext : DbContext
{
    public MyContext(DbContextOptions<MyContext> options)
        : base(options)
    {
    }

    public virtual DbSet<User> Users { get; set; } = null!;
    
    public virtual DbSet<Occupation> Occupations { get; set; } = null!;
}

然后分别创建我们数据库两张表的实体类,它们通过导航属性 occupationid 相互关联

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    
    public int occupationid { get; set; }
    
    public Occupation Occupation { get; set; }
}

public class Occupation
{
    public int Id { get; set; }
    
    public string opname { get; set; }
}

🍀依赖注入

打开我们的program类,创建一个主机构建器,通过AddDbContextPool注册 MyContext 类型到服务容器中。

然后通过AddHostedService 方法添加一个后台服务,该服务将在应用程序启动时运行,这里我添加的是selectUser服务,也就是项目启动的时候会执行它,接下来我们去写selectUser服务

class Program
{
    public static void Main(string[] args)
    {
         // 创建一个主机构建器,用于配置应用程序的启动和依赖注入。
        HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

        // 配置服务,这里添加了数据库上下文池,用于管理数据库连接。
        builder.Services.AddDbContextPool<MyContext>(
            p =>
            {
                p.UseMySql("server=127.0.0.1;uid=root;pwd=password;database=mydb", new MySqlServerVersion("5.7"),
                    opt => opt.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery));
                p.LogTo(Console.WriteLine, LogLevel.Information);
                p.EnableSensitiveDataLogging(true);
            }, 150);

        // 添加宿主服务,我们稍后创建selectUser服务
        builder.Services.AddHostedService<selectUser>();

         // 构建宿主。
        using IHost host = builder.Build();

        // 运行宿主,启动应用程序。
        host.Run();
    }
}

定义一个名为selectUser的类,继承自BackgroundService ,在构造函数中添加参数MyContext ,项目运行时会通过依赖注入给当前类提供一个MyContext上下文,这样,selectUser 类就可以使用这个 DbContext 实例来访问数据库。

使用 _myContext.Users 来访问数据库中的 Users 表。Include(p => p.Occupation) 表示在查询用户时,还要包括关联的 Occupation 实体

public class selectUser : BackgroundService
{
    private readonly MyContext _myContext;

    public selectUser(MyContext myContext)
    {
        _myContext = myContext;
    }
    

    protected override async Task<int> ExecuteAsync(CancellationToken stoppingToken)
    {
        var find = _myContext.Users
            .Include(p => p.Occupation)
            .ToList();
        foreach (var user in find)
        {
            Console.WriteLine(user.Name);
        }

        return 0;
    }
}

这样在程序执行的时候,我们就可以通过多表联查获得用户的职业

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在.NET Framework 4.0上使用Entity Framework连接mysql数据库需要使用MySQL Connector/NET提供的MySQL.Data.EntityFramework组件。以下是具体步骤: 1. 下载并安装MySQL Connector/NET。 2. 在Visual Studio中创建一个新项目。 3. 在项目中添加对MySQL.Data.EntityFramework的引用。 4. 在App.config或Web.config文件中添加以下配置节: ```xml <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <connectionStrings> <add name="MyDbContext" connectionString="server=localhost;user id=root;password=my_password;database=my_database" providerName="MySql.Data.MySqlClient" /> </connectionStrings> <entityFramework> <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF4" /> <providers> <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF4" /> </providers> </entityFramework> </configuration> ``` 其中,MyDbContext是你的DbContext的名称,connectionString是你的mysql连接字符串,invariantName是mysql的提供程序名称。 5. 创建一个DbContext类,继承自System.Data.Entity.DbContext,并添加以下代码: ```csharp using System.Data.Entity; using MySql.Data.EntityFramework; [DbConfigurationType(typeof(MySqlEFConfiguration))] public class MyDbContext : DbContext { public MyDbContext() : base("MyDbContext") { } public DbSet<MyEntity> MyEntities { get; set; } } ``` 其中,MyEntity是你的实体类。 6. 在程序中使用DbContext进行数据访问。 ```csharp using (var db = new MyDbContext()) { var myEntity = new MyEntity { Name = "Test" }; db.MyEntities.Add(myEntity); db.SaveChanges(); } ``` 以上就是在.NET Framework 4.0上使用Entity Framework连接mysql数据库的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃香蕉的阿豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值