2016-11-09 2 views
3

Я использую Entity Framework 6 для выполнения основных операций CRUD, которые все хорошо и хорошо. Мне нужно иметь возможность выбирать мои объекты в диапазоне дат, что опять же довольно просто, эти объекты могут быть распределены по нескольким базам данных, которые по существу являются складами для данных за предыдущий год. Как только мы ищем их в диапазоне дат.Использование Entity Framework с архивными базами данных

Пример: мы хотим, чтобы все объекты Foo были между 1 января 2015 года и 9 ноября 2016 года; данные Foo с 2015 года будут находиться в другой базе данных. Это происходит до 2005 года. Не все схемы идентичны.

We может имеет 11 проектов EF или 11 контекстов и 11 строк соединения. Это решение имеет проблему необходимости добавлять код каждый год при создании архива. Это похоже на хак. Переключение на методы хранения Azure не является вариантом в обозримом будущем.

Любые более изящные решения?

ответ

2

Пока все ваши базы данных имеют одинаковые (или подобные) схемы для объектов, которые вы хотите запросить, вы можете иметь один DbContext для всех баз данных и просто переключать строку соединения. Вам нужно будет управлять списком строк подключения и прокручивать их, подключаясь к каждому и запрашивая каждый для данных. Конечно, если ваши базы данных называются последовательно (например, в соответствии с годом), вам не нужно поддерживать все строки подключения. Если ваши запросы только когда-либо попадают в один БД, тогда вы можете рассчитать, какая из них является соответствующей строкой соединения, и использовать ее. Это будет выглядеть как стандартная стратегия ошпаривания. Here является ссылкой на библиотеку Microsoft SQL Azure sharding для EF, которая также может быть решением

В качестве альтернативы вы можете использовать возможности SQL Server по перекрестной проверке базы данных и настроить представление по всем базам данных. Это имеет проблемы с обслуживанием, не говоря уже о проблемах с производительностью, но тогда я не знаю размер ваших данных.

+0

Это звучит неплохо! Итак, мы будем искать какое-то регулярное выражение, чтобы посмотреть на строку соединения (предположительно в web.config?) И свопировать. Схемы для таблиц, которые я ищу, схожи, но не идентичны. Могу ли я переделать через свободно или, возможно, просто полагаться на конвенции EF, чтобы сделать картографирование для меня? (будет +1, но я <15 noob) – Jimbob

+0

@Jimbob Вы не можете переназначить EF во время выполнения, поэтому либо создавайте несколько 'DbContext', либо создавайте свои объекты, чтобы они охватывали все возможные поля на всех ваших DB, а затем проверять наличие нулей в полях, которые несовместимы. Вам было бы неплохо иметь прикладной уровень перед уровнем доступа к данным, чтобы обеспечить согласованное представление данных. – flipchart

+0

Итак, мы будем рассматривать новый контекст каждый год? Я подумываю о том, чтобы один из администраторов баз данных сортировал эту серверную сторону с сохраненным proc, чтобы мы могли передавать параметры даты. Будет ли это лучше? – Jimbob

Смежные вопросы