簡體   English   中英

ASP.NET MVC應用程序中的多租戶

[英]Multi Tenancy in ASP.NET MVC Application

在下面的示例中,用最少的冗余代碼實現多租戶的有效方法是什么? 在這種情況下,租戶是一名學生。 學生所在的學校有2個地點,每個地點都需要將數據(即課程)存儲在單獨的數據庫中。 學生登錄時,他們的位置決定了要從哪個數據庫中提取。

我正在使用實體框架和存儲庫模式。 目前,我已經實現了訪問位置1數據庫的實現。 我已經研究了實現位置2的不同選項,例如在HomeController構造函數中注入TenantContext,但是我一直在堅持如何設置正確的數據庫連接以及哪種方法最有效。

以下是僅位置1的代碼。

控制器示例

public class HomeController : Controller
{
    ICourseRepository courseRepository;

    //How to set the correct repository to use based on location?
    public HomeController(ICourseRepository courseRepository)
    {
        this.courseRepository = courseRepository;
    }

    //Register for a new class
    public ViewResult Register()
    {
        var courseList = courseRepository.AvailableCourses();
        return View(courseList);
    }
}

課程資料庫

public class CourseRepository : ICourseRepository
{
    private Location1DB context = new Location1DB();

    public List<Course> AvailableCourses()
    {
        //Get available courses from Location 1 Course Table
    }
}

Location1Model.Context.cs (使用EF DbContext Generator生成)

public partial class Location1DB: DbContext
{
    public Location1DB()
        : base("name=Location1DB")
    {
    }

    public DbSet<Course> Courses { get; set; }
}

Web.config

<connectionStrings>
     <add name="Location1DB" ... />
     <add name="Location2DB" ... />
</connectionStrings>

抱歉,明天我有時間時,我會嘗試編輯並提供更完整的答案,但是請檢查此答案以及Castle Windsor集裝箱doco以使您入門(也不確定您使用的是哪個集裝箱,但所有主要的集裝箱都應該有)此功能)。

想法是從cookie中讀取LocationID,獲取正確的連接字符串,並使容器將其作為參數傳遞給dbcontext。

記住DbContext是一個局部類,因此您可以聲明自己的局部DbContext類,在其上放置一個接口,並將其作為依賴項傳遞到存儲庫中。

暫無
暫無

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

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