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 быстро предоставит вам наилучший подход к вашей ситуации.

Другие вопросы по тегам