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 (что категорически запрещено).


person user3162602    schedule 05.01.2014    source источник


Ответы (1)


По умолчанию при создании подкласса tCustomerExtended XAF должен генерировать подробные представления, которые включают все свойства tCustomer. Я не уверен, почему вы не видите такого поведения.

Невозможно просто добавить новые столбцы в вашу старую таблицу tCustomer. Пока вы не измените существующие столбцы, ваша старая система должна продолжать работать. Ваша старая система ломается, если в таблице tCustomer есть лишние столбцы? Если разрешены только минимальные изменения, вы можете просто создать свойство [Aggregated] с [ExpandObjectMembers]. Это добавит один столбец в старую таблицу tCustomers, которая предоставит ссылку на все расширенные свойства.

Если вам действительно нужны две таблицы с нулевыми изменениями в tCustomer, то, я думаю, вам придется пройти через некоторые обручи, чтобы добиться именно того, что вы хотите. Это, безусловно, возможно, но лучший ответ придет из центра поддержки DevExpress (как и для всех вопросы, связанные с DevExpress). Если вы разместите там пример проекта, команда DevExpress быстро предложит вам лучший подход для вашей ситуации.

person shamp00    schedule 05.01.2014