Внедрение Saas в ASP.NET приложение MVC с использованием языка C#
Мы разработали ERP-приложение с использованием Visual Studio 2019, C# и ASP.NET MVC. Мы хотим перевести его на модель SaaS.
Мы использовали Entity Framework с подходом, основанным на данных. И большая часть нашего кода использует Linq для доступа к базе данных. Строка подключения к базе данных SQL Server указывается в файле web.config, который создается автоматически при создании EF.
Пример строки подключения в файле web.config:
<добавить имя="myEntities"
="" connectionstring="metadata=res://*/myEntities.csdl|res://*/myEntities.ssdl|res://*/myEntities.msl;provider=System.Data.SqlClient;строка подключения провайдера="источник данных=xx.xx.xx.xxx;начальная catalog=XXXcustomerdB;userid=sa;password=xxxpassword;MultipleActiveResultSets=True;App=EntityFramework"" providername="System.Data.EntityClient">
Чтобы разрешить доступ клиенту, мы создаем веб-сайт на IIS по порту, например 8112. веб-сайт создается в специальной папке под inetpub (например, C:\inetpub\customername).
Эта база данных клиентов (XXXcustomerdB) создается в SQL Server и указывается в файле web.config. Этот файл web.config также копируется в ту же папку
Теперь для другого клиента выполняется та же процедура (отдельный порт, папка и база данных).
Все базы данных, созданные таким образом, имеют одинаковую структуру базы данных и прекрасно работают с одним и тем же EF. Таким образом, для 10 клиентов у нас будет 10 папок и 10 различных портов
Перед нами стоят следующие задачи:
Поскольку мы используем LINQ, DbContext всегда привязан к соединению, указанному в web.config, что заставляет нас иметь отдельный web.config и, следовательно, отдельные папки для каждого клиента. Кроме того, для каждого клиента мы должны создавать и поддерживать ресурсы (папку, веб-сайт, порт IIS, конфигурацию и т.д.) По-разному и вручную.
Использование ADO.NET, мы могли бы создать строку подключения динамически и получить доступ к нескольким базам данных на основе логина пользователя, но LINQ не позволяет нам этого сделать. Мы находимся на той стадии, когда мы не можем бросить LINQ и перейти к ADO.NET.
Нам нужно решение, в котором нам не нужно создавать отдельную папку, веб-сайт или порт. Веб-сайт размещается просто в корневом каталоге и порту 80.
Логин пользователя будет авторизован из общей базы данных (которая может быть указана в файле web.config). Эта база данных будет содержать информацию об имени базы данных пользователя и других учетных данных.
Это позволит нам реализовать инфраструктуру SaaS.
Может ли кто-нибудь предложить нам решение? Заранее большое спасибо..
Что я уже пробовал:
Я просмотрел всю сеть, но все указывают на многоквартирный дом, что на самом деле не так.