asp.net mvc несколько строк подключения
Я создаю приложение asp.net MVC, используя MVC 3.0. У меня есть 2 пользователя, но база данных такая же. Итак, возможно ли установить две строки подключения или даже больше в web.config? когда пользователь входит в систему, я перенаправляю его в свою базу данных, чтобы он мог использовать свою базу данных.
Таким образом, основная проблема заключается в том, чтобы выяснить, какой пользователь вошел в систему и использовать строку подключения для этого пользователя.
Я использую контроллер учетной записи mvc по умолчанию и, например, когда я хочу отобразить приветственное сообщение для пользователя в моем представлении, я набираю: if (@User.Identity.Name == "UserName"), а затем какое-то сообщение. Так где же лучшее место для поиска? какой пользователь вошел в систему и установил свою строку подключения в контроллере или в представлении?
3 ответа
Я согласен с ответом Якуба: есть более эффективные способы работы с несколькими арендаторами, чем использование другой базы данных для каждого пользователя.
Однако, чтобы ответить на ваш конкретный вопрос, на ум приходят два варианта:
- Вы можете установить строку подключения в переменную сеанса сразу после входа в систему.
Ваш слой доступа к данным может выбрать строку подключения на основе зарегистрированного пользователя при его создании. (Я бы рекомендовал это по первому варианту)
Чтобы сохранить соединение после входа в систему, если вы используете стандартный 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); }
Если вы хотите выбрать строку подключения при доступе к данным, ваш уровень хранилища или доступа к данным, вероятно, будет иметь систему для обработки этого. Например, с помощью 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 устарела.