У нас есть существующее устаревшее приложение, используемое от 200 до 300 компаний, которое будет перестроено с нуля в ближайшем будущем. Из-за характера нового приложения мы находимся на заборе относительно технологии доступа к данным.Рекомендации по выбору Entity Framework 6 или raw ADO.Net
В целом мы будем иметь архитектуру приложений с несколькими арендаторами (ASP.Net MVC) и архитектуру данных с одним арендатором (то есть каждая компания будет иметь собственную базу данных SQL). Я не хочу обсуждать архитектуру данных с несколькими арендаторами, используя отдельные схемы базы данных для каждой компании. Существуют договорные обязательства, которые требуют, чтобы каждая компания имела свою собственную базу данных.
У нас есть три проблемы, которые являются причиной нашей нерешительности:
Первое, что я задаюсь вопросом о том, давление памяти. Насколько я понимаю, когда DbContext сначала разогревается, он кэширует модель данных сущности. Если мы подключаемся к сотням разных баз данных, это приведет к созданию кэшированной модели данных сущности для каждой базы данных? Если это так, то каким ресурсоемким будет это?
Во-вторых, мы хотим иметь контрольный журнал для многих таблиц, возможно, даже для большинства таблиц. Я думаю, что мы будем использовать какой-то тип искажений событий, связанных с заражением. У нас будет стандартная таблица SQL, в которой хранится текущее состояние объекта и вторая таблица контрольных журналов, в которой хранятся дельта. Я не уверен точно, как что-то подобное будет реализовано с Entity Framework. Может быть, получить только измененные свойства объекта сущности и передать их в таблицу дельта, прежде чем передать полный объект объекта в таблицу состояний. Идеи, безусловно, приветствуются здесь.
Наконец, нам необходимо поддерживать некоторую степень настройки некоторых объектов домена. Эта настройка будет полностью контролироваться конечным пользователем. Чтобы поддержать это, я считаю, что мы будем использовать две таблицы для хранения объекта домена. Первой будет статическая таблица, в которой хранятся требуемые свойства домена. Вторая - динамическая таблица, в которой мы можем изменить схему «на лету», чтобы сохранить пользовательские свойства; так как это контролируется пользователем, эти динамические таблицы будут разными в каждой базе данных. Я не уверен, как с этим справиться с Entity Framework. Возможно, используйте Entity Framework для получения стандартного объекта домена, а затем опуститесь до необработанного ADO.Net, чтобы получить динамические свойства из динамической таблицы и выбросить их в какой-то мешок свойств на сущности. Опять же, любые идеи о том, как наилучшим образом реализовать это, очень ценятся.
Вы задавали очень разные вопросы. Как сделать аудиторские журналы сами по себе, имеет множество возможных решений и длительные ответы для решения всех ваших проблем. Необходимо уделить основное внимание этому вопросу одной проблеме. – AaronLS
Фактор вашего персонала опыт работы с EF и Linq. – NoChance