【问题标题】:How to connection multiples databases MySQL with C#?如何用 C# 连接多个数据库 MySQL?
【发布时间】:2020-10-11 15:29:46
【问题描述】:

我正在构建一个 ASP.NET Web API 应用程序,但遇到了一个问题...:/

我有 appsettings.json 来配置 mysql 连接:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "CoinConnection": "server=127.0.0.1;user id=root;password=root;port=3306;database=coin_db;Allow User Variables=True;",
    "UserConnection": "server=127.0.0.1;user id=root;password=root;port=3306;database=user_db;Allow User Variables=True;"
  }
}

我有Startup.cs来执行连接mysql的服务:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

namespace WebApplication2
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddTransient<AppDb>(_ => new AppDb(Configuration["ConnectionStrings:CoinConnection"]));
            services.AddControllers();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

我有 AppDb.cs 来接收字符串并连接到 mysql 中的数据库 coin_db

using System;
using MySqlConnector;

namespace WebApplication2
{
    public class AppDb : IDisposable
    {
        public MySqlConnection Connection { get; }

        public AppDb(string connectionString)
        {
            Connection = new MySqlConnection(connectionString);
        }

        public void Dispose() => Connection.Dispose();
    }
}

我不知道如何才能连接第二个数据库(user_db)...我已经尝试了所有方法,但我不知道该怎么做。

【问题讨论】:

  • 您可以简单地拥有两个类,每个类连接到不同的数据库。我肯定会在每次使用后立即处理连接,而不是在处理类时。

标签: c# mysql .net asp.net-web-api


【解决方案1】:

如果是同一台服务器,则不需要第二个连接。

只需在表名前加上数据库名

SELECT a.*,b.* FROM coin_db.table1 a INNER JOIN user_db.tabl2 b ON a.id P= b.id

Mysql可以识别so,你的意思是whichtable。

两个连接是可能看到这里Choose one of many Internet connections for an application

【讨论】:

    【解决方案2】:

    您是否尝试过为每个数据库使用不同的 AppDb 实现? 然后你就可以在你的路由中通过依赖注入来访问它们。

    public class UserDb : AppDb 
    {
       public UserDb(string connectionString) 
       : base(connectionString)
       {}
       // ...
    }
    
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<AppDb>(_ => new AppDb(Configuration["ConnectionStrings:CoinConnection"])); // TODO: use CoinDb class and make AppDb class abstract
        services.AddTransient<UserDb>(_ => new UserDb(Configuration["ConnectionStrings:UserConnection"]));
        services.AddControllers();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      相关资源
      最近更新 更多