0

私は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を選択した場合、良いリストがありますが、結果の1つについて詳しく説明すると、次のようになります。

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

dbのconnectionStringは、dbBではなくdbAに関連付けられています。新しいデータベースが十分に初期化および保存されていないのはなぜですか?

4

1 に答える 1

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());
   }
}
于 2012-09-11T10:01:09.750 に答える