【问题标题】:How to use diffrent DbContext per user in mvc core 2.2如何在 mvc core 2.2 中为每个用户使用不同的 DbContext
【发布时间】:2019-07-12 14:03:23
【问题描述】:

我有一些公司和很多用户。 现在我需要每个公司有一个数据库。

必须在 MVC Core 中解决这个问题。和控制DI

【问题讨论】:

  • 您正在为多租户设计应用程序。 Google for Multi-tenant asp.net core, ef core。这应该有助于向您展示,因为您有几种方法可以解决这个问题。类似gunnarpeipman.com/series/multi-tenant-aspnet-core shuold help.
  • 您的问题太宽泛,无法回答。我已投票关闭它,但添加了一条评论以帮助您完成您的旅程。 :-) 祝你好运,在您研究和尝试事物时,请随时回来提出更狭隘的问题,我们可以为您提供帮助。
  • 除了连接到不同的数据库之外,DbContext 是否相同?或者,DbContext 完全不同,如果是这样,您可以考虑实现 DbContextFactory,它用于创建带有用户标识符的 dbContext。

标签: asp.net-core model-view-controller entity-framework-core


【解决方案1】:

你需要像这样创建几个DataBaseContext类

 using Microsoft.EntityFrameworkCore;

    namespace Data.Models
    {
        public class FirstDataContext: DbContext
        {
            public DbSet<User> Users{ get; set; }
            public FirstDataContext(DbContextOptions<FirstDataContext> options)
                : base(options)
            {

            }
        }


        public class SecondDataContext : DbContext
        {
            public DbSet<User> Users{ get; set; }
            public SecondDataContext(DbContextOptions<SecondDataContext> options)
                : base(options)
            {

            }
        }
    }

然后在 appsettings.json 添加几个包含数据库地址的连接字符串

    {
      "ConnectionStrings": {
        "FirstCompany": "Server=(localdb)\\mssqllocaldb;Database=company1;Trusted_Connection=True;"
      },
         "SecondCompany": "Server=(localdb)\\mssqllocaldb;Database=company2;Trusted_Connection=True;"
      },
    }

然后转到 StartUp.cs

   public void ConfigureServices(IServiceCollection services)
            {

                string FirstCompany= Configuration.GetConnectionString("FirstCompany");
string SecondCompany= Configuration.GetConnectionString("SecondCompany");

                services.AddDbContext<FirstDataContext>(options =>
                    options.UseSqlServer(connection));

services.AddDbContext<SecondDataContext>(options =>
                    options.UseSqlServer(connection));
                services.AddMvc();
            }

DI:

     public class HomeController: Controller
     {    
          FirstDataContext fdcntxt;
          SecondDataContext sdcntxt;

          public HomeController (FirstDataContext fdcntxt, SecondDataContext sdcntxt)
          {
               this.fdcntxt = fdcntxt;
               this.sdcntxt = sdcntxt;
          }
      }

我认为这应该可行)。

【讨论】:

    猜你喜欢
    • 2019-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2021-11-23
    • 2011-01-02
    相关资源
    最近更新 更多