在运行时更改dbContext

时间:2012-09-11 09:37:47

标签: c# asp.net asp.net-mvc entity-framework

我有一个UsersContext:带有DbSet用户的DbContext {get;组; }

UsersController.cs

public class UsersController : Controller
{
   private UsersContext db = new UsersContext("dbA");

   public ViewResult Index()
   {
       if (...)
          db = new UsersContext("dbA");
       else
          db = new UsersContext("dbB");
       return View(db.Users.ToList());
   }
}

这将返回良好的关联列表 如果我选择dbB,我有一个好的列表,但是当我详细介绍其中一个结果时:

public ViewResult Details(int id)
{
   User user = db.Users.Find(id);
   return View(user);
}

db的connectionString与dbA而不是dbB相关联。 为什么新数据库没有很好地启动和保存?

1 个答案:

答案 0 :(得分:1)

这是因为您的Index操作和Details操作不会在同一个控制器实例上执行。您可以将数据库名称保存在会话变量中,并使用它来创建DbContext实例。

public class UsersController : Controller
{
   private UsersContext db;

   protected override void Initialize(RequestContext requestContext)
   {
        base.Initialize(requestContext);

       if (Session["Database"] == null)
          db = new UsersContext("dbA");
       else
          db = new UsersContext((string)Session["Database"]);
   }

   public ViewResult Index()
   {
       if (...)       {
          db = new UsersContext("dbA");
          Session
       else
       {
          db = new UsersContext("dbB");
          Session["Database"] = "dbB";
       }

       return View(db.Users.ToList());
   }
}