在以下示例中,用最少的冗余代码实现多租户的有效方法是什么?在这种情况下,租户是学生。学生的学校有 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; }
}
网页配置
<connectionStrings>
<add name="Location1DB" ... />
<add name="Location2DB" ... />
</connectionStrings>