asp.net mvc несколько строк подключения - PullRequest
0 голосов
/ 27 июня 2011

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

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

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

Ответы [ 3 ]

2 голосов
/ 27 июня 2011

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

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

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

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

1 голос
/ 27 июня 2011

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

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

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

    1. Чтобы сохранить соединение после входа в систему, если вы используете стандартный контроллер учетных записей ASP.NET MVC, посмотрите действие входа в систему 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);

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

1 голос
/ 27 июня 2011

вы можете иметь несколько строк подключения в 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 устарела.

...