XAF/XPO Как интегрировать устаревшую базу данных
Мы экспериментируем с DevExpress XAF & XPO, чтобы использовать его для дальнейшего развития существующей ERP-системы для малого бизнеса. У нас есть база данных SQL, где существующие таблицы не должны быть изменены. То, что мы пытаемся сделать, это добавить новые необходимые свойства таблицы только в новые таблицы, которые затем должны быть "связаны" со старыми таблицами посредством наследования объектов (MapInheritanceType.OwnTable
).
Например:
У нас есть устаревший стол tCustomer. Теперь мы добавляем объект XPO tCustomerExtended как
public class tCustomerExtended : test.Module.BusinessObjects.db.tCustomer ...
tCustomerExtended
класс будет расширен с новыми свойствами и tCustomer
класс остается неизменным (для использования старым клиентским приложением).
Это работает нормально, конечно. Новый стол tCustomerExtended
создается с помощью первичного ключа kCustomer (ключ устаревшей таблицы). Также XAF генерирует пользовательский интерфейс, как и ожидалось: tCustomerExtended
представление пустое, так как оно показывает tCustomerExtended
записей.
!!! Но чего мы действительно хотим добиться, так это показать все существующие tCustomer
записи в этом представлении и новые свойства tCustomerExtended
, Затем метод OnSaving должен сохранить устаревшие свойства в tCustomer, а новые свойства в tCustomerExtended. Также мы должны сгенерировать ключ kCustomer, поскольку старая таблица tCustomer kCustomer PK не имеет Спецификации идентичности.
На данный момент я не понимаю, как этого добиться, не меняя старое tCustomer
(что абсолютно запрещено).
1 ответ
По умолчанию при создании подкласса tCustomerExtended
XAF должен генерировать подробные представления, которые включают все tCustomer
свойства тоже. Я не уверен, почему вы не видите такое поведение.
Не могу просто добавить новые столбцы в ваш старый tCustomer
Таблица. Пока вы не измените существующие столбцы, ваша старая система должна продолжать работать. Ваша старая система ломается, если в tCustomer
Таблица? Если допустимы только минимальные изменения, вы можете просто создать [Aggregated]
собственность с [ExpandObjectMembers]
, Это добавит один столбец к старому tCustomers
таблица, которая предоставит ссылку на все расширенные свойства.
Если вам действительно нужны две таблицы с нулевыми изменениями tCustomer
Тогда я думаю, что вам нужно будет прыгнуть через несколько обручей, чтобы достичь именно того, что вы хотите. Это, конечно, возможно, но лучший ответ придет из центра поддержки DevExpress (как и для всех вопросов, связанных с DevExpress). Если вы опубликуете там пример проекта, команда DevExpress быстро предоставит вам наилучший подход к вашей ситуации.