[英]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 設計如何,但您想要的是如何在項目中創建和使用多個數據庫。
您可以按照以下步驟操作:
創建第一個數據庫
Model 設計:
public class Account { public int Id { get; set; } public string Name { get; set; } }
創建數據庫上下文:
public class FirstContext: DbContext { public FirstContext (DbContextOptions<FirstContext> options): base(options) { } public DbSet<Account> Account { get; set; } }
在appsettings.json中添加連接字符串:
"ConnectionStrings": { "FirstContext": "Server=(localdb)\\mssqllocaldb;Database=FirstUser;Trusted_Connection=True;MultipleActiveResultSets=true" }
配置 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.