Я делаю веб-приложение, которое будет использоваться несколькими компаниями, и я хочу, чтобы каждый из них имел отдельную базу данных.ASP .Net Entity Framework одна база данных для пользователя
На экране входа в систему пользователь выберет компанию, и он перейдет в отдельную базу данных, чтобы получить данные строки соединения. Приложение сначала использует код, поэтому база данных будет создана с помощью этой новой строки соединения, если она еще не существует.
Мой подход состоял в том, чтобы сохранить строку соединения в сеансе пользователя.
public MyContext() : base(MySession.Current.ConnectionString)
{
Database.SetInitializer(new MyDevDbInitializer());
}
Я сделал строку подключения по умолчанию для возврата в случае, если она не может получить сеанс. Кажется, что это работает, но я могу видеть, что он по умолчанию используется несколько раз для каждого запроса, прежде чем получить сохраненный. Но создание базы данных и операции CRUD работают нормально.
Я не знаю, правильно ли я делаю это, и если другой запрос сделан (я полагаю, что они есть), эти запросы выполняются изнутри, я не могу их проследить.
Извините за длинный текст. :)
Я бы посоветовал вам не создавать базу данных автоматически. У меня был бы один контекст для приложения, ответственный переход к основной базе данных, а затем другой для доступа пользователя, который просто соединяется с использованием существующей базы данных. Затем вы или ваша команда инфраструктуры должны создать базу данных вручную для пользователя при создании учетной записи. Честно говоря, пугающе иметь веб-приложение, создающее базы данных «на лету», так или иначе, но вам также нужно будет предоставить пользователю SQL соединение с полными разрешениями на экземпляр, что представляет большой риск для безопасности. –
В дополнение к тому, что написал @Chris Pratt, подумайте о том, чтобы сделать слой доступа к данным настолько плотным с помощью ASP-базы (MySession.Current.ConnectionString). У вас нет контроля над созданием или отсутствием контекста с неправильной строкой соединения. Кроме того, вы не сможете писать модульные тесты. – bubi
* одна база данных на пользователя * звучит так, будто вам нужно серьезно пересмотреть общую архитектуру. Это звучит как ужасно плохой дизайн .... –