簡體   English   中英

.Net Core 中具有獨立數據庫的多租戶系統

[英]Multi-Tenancy System With Separate Databases in .Net Core

我正在嘗試為每個租戶策略創建實施數據庫。 但我不明白我實際上會怎么做。我點擊了這個鏈接https://www.codeproject.com/Articles/848111/Multi-Tenancy-System-With-Separate-Databases-in-MV但我使用asp.net 核心 MVC。 我是一個絕對的初學者。我如何為不同的用戶創建一個單獨的數據庫。 請幫忙。

不確定您的 model 設計如何,但您想要的是如何在項目中創建和使用多個數據庫。

您可以按照以下步驟操作:

  • 創建第一個數據庫

    1. Model 設計:

       public class Account { public int Id { get; set; } public string Name { get; set; } }
    2. 創建數據庫上下文:

       public class FirstContext: DbContext { public FirstContext (DbContextOptions<FirstContext> options): base(options) { } public DbSet<Account> Account { get; set; } }
    3. 在appsettings.json中添加連接字符串:

       "ConnectionStrings": { "FirstContext": "Server=(localdb)\\mssqllocaldb;Database=FirstUser;Trusted_Connection=True;MultipleActiveResultSets=true" }
    4. 配置 Startup.cs:

       public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); //add this... services.AddDbContext<FirstContext>(options => options.UseSqlServer(Configuration.GetConnectionString("FirstContext"))); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); } }

    5.運行命令創建數據庫(這種方式在 EF Core 中稱為代碼優先):

     PM> add-migration init PM> update-database

    6.然后您可以在(localdb)\MSSQLLocalDB -> Database in SQL Server Object Explorer中找到數據庫(在菜單選項卡中打開View -> 選擇SQL Server Object Explorer ):

    在此處輸入圖像描述

  • 創建第二個數據庫

    重復 1-4 步驟:

    Model:

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

    數據庫上下文:

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

    應用設置.json:

     "ConnectionStrings": { "FirstContext": "Server=(localdb)\\mssqllocaldb;Database=FirstContext-ed05c500-1e05-4d2c-876d-02172e464153;Trusted_Connection=True;MultipleActiveResultSets=true", "SecondContext": "Server=(localdb)\\mssqllocaldb;Database=SecondUser;Trusted_Connection=True;MultipleActiveResultSets=true" }

    啟動.cs:

     services.AddDbContext<FirstContext>(options => options.UseSqlServer(Configuration.GetConnectionString("FirstContext"))); //add this... services.AddDbContext<SecondContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SecondContext")));

    不同的是你包含多個dbcontext,所以你在運行命令創建數據庫時需要指定dbcontext名稱:

     PM> add-migration init2 -context secondcontext PM> update-database -context secondcontext
  • 對於如何獲取不同的用戶數據:

     public class AccountsController: Controller { private readonly FirstContext _context; private readonly SecondContext _context2; public AccountsController(FirstContext context, SecondContext context2) { _context = context; _context2 = context2; } public async Task<IActionResult> Index() { var user1 = _context.Account.ToList(); var user2 = _context2.User.ToList(); return View(); } }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM