Entity Framework и база данных Dynamics NAV
В настоящее время я работаю над проектом приложения для интранета с использованием ASP.NET MVC 3. Одним из основных требований является то, что все данные, созданные с помощью приложения, также должны быть доступны в программном обеспечении ERP клиента; они работают с MS Dynamics NAV. Доступ к данным на самом деле не является проблемой, поскольку NAV использует SQL-Server в качестве своей базы данных.
На самом деле у меня уже есть рабочий прототип, который использует Entity Framework для доступа к данным. Основная проблема здесь заключается в том, что моя компания также разрабатывает довольно много пользовательских функций в рамках ERP, и, следовательно, некоторые таблицы базы данных, из которых мне приходится читать и писать, часто меняются. Это не будет проблемой в обычной ситуации, но здесь каждое поле в базе данных помечено как not null
, очень раздражающая особенность Dynamics NAV. Это означает, что каждое поле, добавленное в таблицу, нарушает мой код, поскольку Entity Framework пытается вставить нулевое значение, когда оно не знает поля.
Может ли кто-нибудь из вас придумать решение, которое не требовало бы регенерации модели после каждого изменения в таблицах?
Изменить: К сожалению, наш клиент по-прежнему использует версию 4.0 Nav, поэтому веб-сервисы не вариант.. Я уже разработал другое приложение для них (часть системы управления складом, которая работает на мобильных терминалах), обращаясь непосредственно к SQL Server, но это было не совсем в том же масштабе.
1 ответ
Если ваше требование заключается в интеграции с ERP, например, с Dynamics NAV, вы должны передать весь доступ к данным через его сервер приложений. Я думаю, что Dynamics NAV предоставляет веб-сервисы для связи с сервером приложений. Прямой доступ к его таблицам - это путь к катастрофе, особенно из-за транзакций и возможных тупиков. EF сделает это еще хуже, потому что вы не сможете настроить запросы.
Интеграция приложений через базу данных требует полного контроля над SQL, генерируемым всеми обращающимися приложениями.
Ответ на ваш главный вопрос - нет. Смысл разработки базы данных в первую очередь заключается в том, чтобы заново генерировать вашу модель после каждой модификации базы данных - особенно, если каждая модификация базы данных является критической (еще одна причина, по которой интеграция через базу данных не является для вас хорошим выбором).