我有一个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相关联。 为什么新数据库没有很好地启动和保存?
答案 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());
}
}