如何强制 AX 2012 在带下划线的 SQL 表中创建主键和外键?

How to force AX 2012 create primary keys and foreign keys in underlining SQL tables?

我将我的销售账单存储在两个 table 中(简化):BillHeader(BillId、Date、Salesman)和 BillDetail(BillId、LineId、ItemId、Quantity...)我想制作 BillId作为 table BillHeader 的主键; (BillId, LineId) 作为table BillDetail 的主键,我可以成功(我也可以在SQL 数据库中看到真正的主键)。问题是我无法将 table BillDetail 的 BillId 作为外键,只是为了确保我不会输入错误的 BillId 数据(BillHeader table 中没有相关的 BillId):我检查了数据库,但看不到那里的相关外键。

以下是我所做的: 1) Table 账单头: - 字段 BillId:[Mandatory]=Yes。 - 索引 idx_BillId 使用字段 BillId:[AllowDuplicates]=No,[AlternateKey]=Yes。 - table BillHeader: [PrimaryIndex]=idx_BillId, [ClusterIndex]=idx_BillId.

SQL 数据库显示列 [PARTITION]、[DATAAREAID]、[BILLID] 构成 table 的主列。

2) Table 账单详情: - 添加新关系 fk_BillId: [Table]=BillHeader (parent table), [Validate]=Yes, [RelatedTableCardinality]=ExactlyOne (each record in table BillDetail 在 BillHeader 中只有一条相关记录), [Cardinality]=ZeroMore (BillHeader 中每条具有相同 billId 的记录在 BillDetail 中有 is/are 0 个或多个相关记录), [RelationshipType]=Association(外键) - 添加新关系后,tableBillDetail中新增一个字段,重命名为BillId,并设置[Mandatory]=Yes.

在这些步骤之后,我尝试使用 X++ 代码(简单的 table 的 insert() 方法)将几条新记录插入到 table BillDetail 中,我什至可以成功完成我在父 table 中没有任何内容。我想念什么?

谢谢。

如果要使用 x++ 验证插入,则需要重写验证写入方法来执行验证。 https://msdn.microsoft.com/en-us/library/hh803130.aspx

使 table 关系验证 属性 为 Yes 意味着每次通过表单向子 table 插入记录都会被拒绝,除非相关记录存在于引用的父 table.