0

在以下示例中,使用最少冗餘代碼實現多租戶的有效方法是什麼?在這種情況下,租戶是一名學生。學生的學校有2個地點,每個地點都要求將數據(即課程)存儲在單獨的數據庫中。當學生登錄時,他們的位置決定從哪個數據庫中提取。ASP.NET MVC應用程序中的多租戶

我正在使用實體框架和存儲庫模式。目前我有訪問位置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); 
    } 
} 

CourseRepository

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發生器genereated)

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> 
+0

我不認爲你明白多租戶的含義。多租戶意味着您有多個網站都使用相同的代碼庫,並且只通過其URL(或可能在用戶登錄中的信息)進行區分。在這種情況下,您可能會有兩個網站提供相似的內容,並使用相同的代碼,但使用不同的主題或不同的佈局,具體取決於用戶輸入的網址。 – 2013-03-18 17:08:46

+0

好的,那麼上面這種情況是否存在一個術語?代碼可能會爲不同用戶重疊但數據源不同。 – user1620141 2013-03-18 17:27:51

+0

這是一個引導我進入多租戶的帖子的例子:http://stackoverflow.com/questions/2624154/using-multiple-databases-within-one-application – user1620141 2013-03-18 18:00:44

回答

0

對不起,我會嘗試編輯,並提供一個更完整的答案時,我得到明天的時間,但檢查該SO answer和溫莎城堡容器doco讓你開始(也不知道你使用的是什麼容器,但所有主要的容器都應該有這個功能)。

想到的是從Cookie中讀取LocationID,獲取正確的連接字符串並讓容器將其作爲參數傳遞給您的dbcontext。

DbContext是一個部分類記住,所以你可以聲明你自己的部分DbContext類,把一個接口,並作爲一個依賴到您的存儲庫。

+0

非常感謝您的幫助和鏈接。我正在使用StructureMap。 – user1620141 2013-03-21 17:22:46