We are experimenting with DevExpress XAF & XPO in order to use it for our further devlopment of an existing small business ERP system. We have a SQL database, where the existing tables must not be changed. What we are trying to do is to add new needed table properties only to a new tables that then should be "connected" to the old tables through object inheritance (MapInheritanceType.OwnTable
).
For example:
We have a legacy tCustomer table. Now we add an XPO object tCustomerExtended like
public class tCustomerExtended : test.Module.BusinessObjects.db.tCustomer ...
The tCustomerExtended
class then shall be extended with new properties and the tCustomer
class remains unchanged (in order to be used by the old client application).
This works fine of course. A new table tCustomerExtended
is generated with a primary key kCustomer (the key of the legacy table). Also XAF generates a UI as expected: The tCustomerExtended
view is empty, since it shows the tCustomerExtended
entries.
!!! But what we really want to achieve is to show all existing tCustomer
entries in this view and the new properties of tCustomerExtended
. The OnSaving method should then save the legacy properties to tCustomer and the new properties to tCustomerExtended. Also we have to generate a kCustomer key, since the old tCustomer table kCustomer PK has no Identity Specification.
At this moment I do not realize how to achieve this without changing the old tCustomer
(what is absolutely not allowed).
By default, when you create the subclass
tCustomerExtended
, XAF should generate detail views which include all thetCustomer
properties too. I'm not sure why you are not seeing that behaviour.Can't just add new columns to your old
tCustomer
table. So long as you don't change any existing columns, your old system should continue to work. Does your old system break if there are extra columns in thetCustomer
table? If only minimal changes are allowed, you can just create an[Aggregated]
property with[ExpandObjectMembers]
. This will add a single column to the oldtCustomers
table which will provide the link to all the extended properties.If you really do need two tables with zero changes to
tCustomer
, then I think you will need to jump through some hoops to achieve exactly what you want. It's certainly possible, but the best answer will come from the the DevExpress support center (as for all DevExpress-related questions). If you post a sample project there, the DevExpress team will quickly provide you with the best approach for your situation.