次の例で、最小限の冗長コードでマルチテナンシーを実装する効率的な方法は何ですか? このシナリオでは、テナントは学生です。学生の学校には 2 つの場所があり、それぞれの場所でデータ (コースなど) を個別のデータベースに保存する必要があります。学生がログインすると、学生の場所によってプルするデータベースが決まります。
Entity Framework と Repository Pattern を使用しています。現在、Location 1 DB にアクセスするための実装があります。HomeController コンストラクターに TenantContext を挿入するなど、場所 2 を実装するためのさまざまなオプションを調べましたが、正しいデータベース接続を設定する方法と、どのアプローチが最も効率的かについて行き詰まっています。
以下は、ロケーション 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>