Есть группа сервисов, работающих с одной и той же базой. Доступ к базе идёт через Linq2Sql и через Entity Framework (разные сервисы, написанные в разное время и разными командами). Со всем этим зоопарком всплывает одна общая проблема — при любом изменении схемы базы данных все эти фреймворки отваливаются.
Я сейчас хочу привести всё это в порядок, унифицировать доступ к базе и, среди прочего, мне нужно предложить какое-то нормальное решение для изменений схемы данных. "Нормальным" в моём понимании будет решение, которое позволит изменять структуру таблиц так, чтоб сервисы, работающие с этими таблицами, не отваливались.
Со стороны самой базы данных всё более-менее понятно — если мы удаляем столбец, то естественно всё развалится. Поэтому удалять столбцы мы будем только после того как столбец удалён из всех linq2sql / EF маппингов. Тут другое. Как сделать чтобы при добавлении столбцов оно не вываливалось с эксепшном о несовпадении схемы?
У меня есть кое-какие мысли о перенаправлении запросов чтения на View вместо самих таблиц, но тогда придётся поддерживать какую-то версионность этих view.. Да и вопрос со вставкой данных остаётся. Другой мысль — обернуть всё в хранимые процедуры, но тогда нужна будет версионность этих процедур..
Мне думается, что этой задачей люди занимались ещё много лет назад и наверняка есть какие-то готовые решения и рекоммендации для Entity Framework или Linq2Sql чтобы избегать таких эксепшнов.
Подскажите, куда стоит копнуть?..