Asp.net Multi Tenancy реализация существующего решения - PullRequest
1 голос
/ 15 октября 2019

У меня есть решение MVC asp.net, сначала код Entity Framework, в котором используются десятки таблиц базы данных, разработанных для одной компании, использующей это решение.

Требуется разрешить нескольким компаниям использоватьрешение, поэтому мы добавили «CompanyID» в качестве столбца ко всем таблицам базы данных и установили значение по умолчанию. Существует таблица компаний с различными названиями компаний и идентификаторами компаний. При входе в систему пользователь выбирает компанию, в которую он входит, в которой сохраняется идентификатор компании в сеансе.

В настоящий момент каждый вызов Entity Framework должен быть обновлен, чтобы включить в него идентификатор компании, например, при выборе «Я являюсь сотрудником». делать:

List<Employee> employees = db.Employees.Where(x => x.CompanyID = Session.CompanyID).ToList();

Как вы можете видеть, это будет утомительно делать тысячи звонков в БД. Любое обновление, сохранение и выборка должны быть изменены.

Конечно, я делаю это долго, и во время выполнения есть способ глобально добавить все вызовы БД, чтобы включить CompanyID, сохраненный в сеансе зарегистрированных пользователей. ? Что-то, что динамически добавляет CompanyID при получении значений или хранении и т. Д.? Возможно, пакет, который я могу использовать для выполнения этой задачи во время выполнения?

1 Ответ

1 голос
/ 15 октября 2019

На мой взгляд, нет необходимости добавлять CompanyID в КАЖДУЮ таблицу в базе данных. Я бы выбрал только «корневые» таблицы / сущности для этого. Например, Employee или Department явно звучат как отношения «многие-к-одному» с компанией, поэтому добавление CompanyID звучит правильно. Но, например, EmployeeEquipment, который является отношением многие-к-одному с Employee, необязательно должен иметь столбец CompanyID, поскольку его можно отфильтровать по объединенной таблице Employee.

ОтносительноВаш запрос отфильтровать по CompanyID во всем мире, я не знаю ничего, что может сделать это за запрос. Существуют глобальные фильтры для Entity Framework, но я не уверен, как вы можете применять их для каждого запроса. Обратите внимание на .HasQueryFilter() при создании модели , если вы используете Entity Framework Core.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...