0

我们正在试验 DevExpress XAF 和 XPO,以便将其用于我们进一步开发现有的小型企业 ERP 系统。我们有一个 SQL 数据库,不能更改现有表。我们正在尝试做的是仅将新的所需表属性添加到新表中,然后应该通过对象继承(MapInheritanceType.OwnTable)“连接”到旧表。

例如:

我们有一个旧的 tCustomer 表。现在我们添加一个 XPO 对象 tCustomerExtended 像

public class tCustomerExtended : test.Module.BusinessObjects.db.tCustomer ...

然后tCustomerExtended该类将使用新属性进行扩展,并且tCustomer该类保持不变(以便由旧的客户端应用程序使用)。

这当然工作正常。tCustomerExtended使用主键 kCustomer(遗留表的键)生成一个新表。XAF 还按预期生成 UI:tCustomerExtended视图是空的,因为它显示了tCustomerExtended条目。

!!!但我们真正想要实现的是tCustomer在此视图中显示所有现有条目以及tCustomerExtended. 然后 OnSaving 方法应将旧属性保存到 tCustomer 并将新属性保存到 tCustomerExtended。我们还必须生成一个 kCustomer 密钥,因为旧的 tCustomer 表 kCustomer PK 没有身份规范。

目前我不知道如何在不改变旧的情况下实现这一点tCustomer(绝对不允许)。

4

1 回答 1

0

默认情况下,当您创建子类时,XAF 应该生成包含所有属性的tCustomerExtended详细视图。我不确定你为什么没有看到这种行为。tCustomer

不能只在旧tCustomer表中添加新列。只要您不更改任何现有列,您的旧系统就应该继续工作。如果表中有多余的列,您的旧系统会中断tCustomer吗?如果只允许进行最小的更改,您只需[Aggregated]使用[ExpandObjectMembers]. 这将向旧表添加一个列,该列tCustomers将提供所有扩展属性的链接。

如果您确实需要两个对 进行零更改的表tCustomer,那么我认为您将需要跳过一些障碍才能完全实现您想要的。这当然是可能的,但最好的答案将来自DevExpress 支持中心(对于所有与 DevExpress 相关的问题)。如果您在此处发布示例项目,DevExpress 团队将迅速为您提供适合您情况的最佳方法。

于 2014-01-05T16:07:46.437 回答