Как изменить базы данных схемы с помощью сущности - PullRequest
2 голосов
/ 08 апреля 2011

Сценарий, в основном, заключается в том, что мне нужна модель домена для использования в моей программе, но для соединения с базами данных разных поставщиков, содержащими, конечно, разные схемы.

Можно ли вручную изменить файл SSDL xml?может быть, лучше создать модель сущности данных для каждой базы данных поставщика и создать что-то вроде модулей на выбор из конфигурации приложения?Опять же, мне понадобятся определенные pocos внутри моего приложения, чтобы они не менялись каждый раз.Это заставляет меня задуматься о возможном решении с созданием слоя для копирования свойств из сущностей EF в мои объекты poco.

Ваш отзыв очень важен!

Спасибо

1 Ответ

2 голосов
/ 10 апреля 2011

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

Можно создать несколько версий SSDL и загрузить MSL, SSDL и CSDL из файлов вместо ресурсов, но если вы изменяете имена таблиц или столбцов в SSDL, вы также должны изменить MSL, потому что он описывает отображение между таблицами, определенными в SSDL, и объектами, определенными в CSDL. Выполнение этого для каждого клиента может быть кошмаром обслуживания, поскольку вам придется либо использовать один EDMX для каждого клиента (также новый CSDL для каждого клиента), либо вручную изменить XML SSDL и MSL. Если вы используете POCO, вам не нужно беспокоиться о множественных сопоставлениях, потому что если ваши CSDL используют все те же имена для сущностей и столбцов, это будет работать.

Если вашим модулям требуются таблицы, которые не должны быть доступны в клиентской базе данных, вы можете просто добавить конфигурацию, которая будет скрывать связанную функциональность (или выдавать исключение, если функциональность каким-то образом случайно использована), но ваши SSDL все равно будут имитировать эти таблицы присутствуют. В противном случае вам действительно нужно создать несколько EDMX - либо по модулю, либо по клиенту.

Разделение приложения на модули оказывает другое влияние на дизайн. Если вы используете один EDMX, вы все равно должны убедиться, что среди сущностей нет навигационных свойств, которые можно нарушить, установив только некоторые модули => не может быть навигационных свойств для сущностей из дополнительных модулей. Если вы создаете EDMX для модуля, то вообще не может быть свойств межмодульной навигации, кроме некоторых общих повторно используемых EDMX.

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

...