asp.net mvc несколько строк подключения

Я создаю приложение asp.net MVC, используя MVC 3.0. У меня есть 2 пользователя, но база данных такая же. Итак, возможно ли установить две строки подключения или даже больше в web.config? когда пользователь входит в систему, я перенаправляю его в свою базу данных, чтобы он мог использовать свою базу данных.

Таким образом, основная проблема заключается в том, чтобы выяснить, какой пользователь вошел в систему и использовать строку подключения для этого пользователя.

Я использую контроллер учетной записи mvc по умолчанию и, например, когда я хочу отобразить приветственное сообщение для пользователя в моем представлении, я набираю: if (@User.Identity.Name == "UserName"), а затем какое-то сообщение. Так где же лучшее место для поиска? какой пользователь вошел в систему и установил свою строку подключения в контроллере или в представлении?

3 ответа

Решение

Я согласен с ответом Якуба: есть более эффективные способы работы с несколькими арендаторами, чем использование другой базы данных для каждого пользователя.

Однако, чтобы ответить на ваш конкретный вопрос, на ум приходят два варианта:

  1. Вы можете установить строку подключения в переменную сеанса сразу после входа в систему.
  2. Ваш слой доступа к данным может выбрать строку подключения на основе зарегистрированного пользователя при его создании. (Я бы рекомендовал это по первому варианту)

    1. Чтобы сохранить соединение после входа в систему, если вы используете стандартный ASP.NET MVC Account Controller, посмотрите на действие PostOn LogOn:

      [HttpPost]
      public ActionResult LogOn(LogOnModel model, string returnUrl)
      {
          if (ModelState.IsValid)
          {
              if (Membership.ValidateUser(model.UserName, model.Password))
              {
                  //EXAMPLE OF WHERE YOU COULD STORE THE CONNECTION STRING
                  Session["userConnectionString"] = SomeClass.GetConnectionStringForUser(model.UserName);
      
                  FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                  if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                  && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                  {
                      return Redirect(returnUrl);
                  }
                  else
                  {
                      return RedirectToAction("Index", "Home");
                  }
              }
              else
              {
                  ModelState.AddModelError("", "The user name or password provided is incorrect.");
              }
          }
      
          // If we got this far, something failed, redisplay form
          return View(model);
      }
      
    2. Если вы хотите выбрать строку подключения при доступе к данным, ваш уровень хранилища или доступа к данным, вероятно, будет иметь систему для обработки этого. Например, с помощью Entity Framework Code First, конструктор DbContext позволяет вам передавать имя строки подключения при ее создании:

    connectionString = SomeClass.GetConnectionStringForUser (model.UserName); DbContext context = new DbContext (connectionString);

Но опять же, я бы посмотрел на другие способы работы с несколькими арендаторами, если ваш бизнес не требует, чтобы у ваших пользователей были физически отдельные базы данных.

Да, вы можете иметь столько строк подключения в файле web.config, сколько хотите.

Но если вы разрабатываете мультитенантное приложение, то есть более эффективные способы, чем добавление строки подключения в файл web.config каждый раз, когда новый пользователь регистрируется.

Вероятно, лучший способ для вас - иметь единую базу данных, в которой пользовательские таблицы имеют внешние ключи для Users Таблица.

Вы можете узнать больше о мультитенантных архитектурах из этой статьи Microsoft.

Вы можете иметь несколько строк подключения в web.config. Теперь, если вы хотите использовать разные строки подключения для разных пользователей, должны быть определенные критерии для разделения пользователей.

 <appSettings><add key="connectionString" value="Data Source=develope\sqlexpress;Initial  Catalog=validation_tdsl;Integrated Security=True;Max Pool Size=1000;Connect Timeout=60000;"></add>
 <add key="connectionString1" value="server=MARK\SQLEXPRESS;database=name;integrated security=true;Max Pool Size=1000;Connect Timeout=60000;"></add>
  <add key="connectionString2" value="server=name\SQLEXPRESS;database=FM;integrated security=true;Max Pool Size=1000;Connect Timeout=60000;"></add>

и позже вы можете использовать их, как следующие

  Dim con As New SqlConnection(System.Configuration.ConfigurationSettings.AppSettings("connectionString"))

 Dim con1 As New SqlConnection(System.Configuration.ConfigurationSettings.AppSettings("connectionString1"))

РЕДАКТИРОВАТЬ: В C# это будет:

  SqlConnection  con = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["connectionString"]);

  SqlConnection  con1 = new SqlConnection(System.Configuration.ConfigurationManager.AppSettings["connectionString1"])

Примечание. ConfigurationSettings устарела.

Другие вопросы по тегам