ASP.NET Core 配置 LINQ To DB 连接数据库MySql

本文仅是为总结一下如何使用linq2db连接数据库MySql的使用,加深一下自己的理解。主要是照着官网的教程进行各个步骤的学习。
在本练习中,您将配置 ASP.NET Core 应用程序以使用 LINQ To DB 访问本地MySql 数据库。(本人为C#初学者,发现关于linq2db连接mysql的文章比较少,本文主要为翻译官方文档的操作过程)

先决条件

这里按本人的软件版本来进行练习。VS2019和MySql5.7.19,两款软件。

1.创建一个新项目

首先,创建一个新的 ASP.NET Core 应用程序。按照下面创建项目的过程点击下一步直到成功创建一个项目。
在这里插入图片描述

2.安装相应的包

右击依赖项,点击管理NuGet程序包,进入以下界面,然后进行相应的搜索安装下图所示的三个包。
在这里插入图片描述

3.自定义数据连接

我们将创建一个用于访问 LINQ To DB 的自定义数据连接,创建一个这样的类:(在项目中右击本项目名,选择添加,类,把AppDataConnection类名输入,最后点击添加。将下面代码复制粘贴覆盖创建的AppDataConnection类函数,同时添加下面两个using的库。

using LinqToDB.Configuration;
using LinqToDB.Data;

public class AppDataConnection: DataConnection
{
    public AppDataConnection(LinqToDbConnectionOptions<AppDataConnection> options)
        :base(options)
    {

    }
}

注:这里我们AppDataConnection继承了 Linq2Db 连接的基类LinqToDB.Data.DataConnection。

4.添加连接字符串

对于这个例子,使用MySql,首先,您要将连接字符串添加到appsettings.Development.json,如下所示:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  //add this添加的
  "ConnectionStrings": {
    "Default": "Server=localhost;Port=3306;Database=MyDatabase;Uid=root;Pwd=TestPassword;charset=utf8;" //<-- connection string, used in the next step
  }
}

(我一开始把连接字符串前面的“Default”给去掉了,害我连了好久老是出问题)

5.配置依赖注入

接着在Startup.cs里面,将下面这块代码插入到ConfigureServices这里进行数据连接注册:

public class Startup
{
    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        //...
        //using LinqToDB.AspNet
        services.AddLinqToDbContext<AppDataConnection>((provider, options) => {
            options
            //will configure the AppDataConnection to use
            //MySql with the provided connection string
            //there are methods for each supported database
            .UseMySql(Configuration.GetConnectionString("Default"))
            //default logging will log everything using the ILoggerFactory configured in the provider
            .UseDefaultLogging(provider);
        });
        //...
    }
}

6.简单实体类的配置

在项目中创建这个简单的实体类Person。

using System;
using LinqToDB.Mapping;

public class Person
{
    [PrimaryKey]
    public int Id { get; set; } 
    public string Name { get; set; }
    public DateTime Birthday { get; set; }
}

7.将表属性添加到数据连接

打开我们的AppDataConnection并添加这个属性。

public class AppDataConnection: DataConnection
{
    //...将下面这个表属性
    public ITable<Person> People => GetTable<Person>();
    //...
}

在这里插入图片描述
现在我们可以将我们的数据连接注入控制器并使用ITable接口查询和插入/更新/删除。
由于我们没有创建实际的数据库,需要将此代码添加到配置方法中 Startup.cs。

public class Startup
{
   //...
   public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
   {
       //...这个方法只用在第一次运行时添加,运行成功后会在数据库中生成相应的person表,当生成完这个表后,后面再运行的话需要将这个方法给注释掉,不然会报错
       using (var scope = app.ApplicationServices.CreateScope())
       {
           var dataConnection = scope.ServiceProvider.GetService<AppDataConnection>();
           dataConnection.CreateTable<Person>();
       }
       //...
   }
}
//...

8.将连接注入控制器

为了实际访问数据库,我们将要从控制器使用它,这里有一个示例控制器PeopleController ,在controllers文件夹里面新建一个PeopleController 类。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LinqToDB;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication2.Controllers
{
    public class PeopleController : Controller
    {
        private readonly AppDataConnection _connection;

        public PeopleController(AppDataConnection connection)
        {
            _connection = connection;
        }

        [HttpGet]
        public Task<Person[]> ListPeople()
        {
            return _connection.People.ToArrayAsync();
        }

        [HttpGet("{id}")]
        public Task<Person?> GetPerson(int id)
        {
            return _connection.People.SingleOrDefaultAsync(person => person.Id == id);
        }

        [HttpDelete("{id}")]
        public Task<int> DeletePerson(int id)
        {
            return _connection.People.Where(person => person.Id == id).DeleteAsync();
        }

        [HttpPatch]
        public Task<int> UpdatePerson(Person person)
        {
            return _connection.UpdateAsync(person);
        }

        [HttpPatch("{id}/new-name/new-birthday")]
        public Task<int> UpdatePersonName(int id, string newName, DateTime newBirhday)
        {
            return _connection.People.Where(person => person.Id == id)
                .Set(person => person.Name, newName)
                .Set(person => person.Birthday, newBirhday)
                .UpdateAsync();
        }

        [HttpPut]
        public Task<int> InsertPerson(Person person)
        {
            return _connection.InsertAsync(person);
        }

        [HttpPut("{id}/name/birthday")]
        public Task<int> InsertPersonInfo(Person person)
        {
            return _connection.InsertAsync(person);
        }

    }
}

运行结果

启动程序(选你的项目名称那启动)。在这里插入图片描述
就可以看到四个选项,可以进行增删查改操作了。
在这里插入图片描述
小结:本人为初学者,仅仅是把官方的教程实践了一下,学习了一下关于.net core linq2db连接数据库MySql的使用。不足之处敬请谅解,欢迎批评建议。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值