public A_16_ControlForeignKeyCombinedKeyTest()
        {
            _attachmentRecordDef = new AddmlRecordDefinitionBuilder()
                                   .WithAddmlFlatFileDefinition(new AddmlFlatFileDefinitionBuilder().Build())
                                   .Build();

            _messageIdPrimaryKeyFieldDef = new AddmlFieldDefinitionBuilder()
                                           .WithRecordDefinition(_attachmentRecordDef)
                                           .WithName("MessageId")
                                           .IsPartOfPrimaryKey(true)
                                           .Build();
            _attachmentNumberPrimaryKeyFieldDef = new AddmlFieldDefinitionBuilder()
                                                  .WithRecordDefinition(_attachmentRecordDef)
                                                  .WithName("AttachmentNumber")
                                                  .IsPartOfPrimaryKey(true)
                                                  .Build();

            _documentRecordDef = new AddmlRecordDefinitionBuilder()
                                 .WithAddmlFlatFileDefinition(new AddmlFlatFileDefinitionBuilder().Build())
                                 .Build();
            _documentPrimaryKeyFieldDef = new AddmlFieldDefinitionBuilder()
                                          .WithRecordDefinition(_documentRecordDef)
                                          .WithName("DocumentId")
                                          .IsPartOfPrimaryKey(true)
                                          .Build();

            AddmlForeignKey addmlForeignKeyAttachment = new AddmlForeignKey("fk1-attachment");
            AddmlForeignKey addmlForeignKeyDocument   = new AddmlForeignKey("fk2-document");

            _recordWithBothCombinedAndSingleForeignKeyDef = new AddmlRecordDefinitionBuilder()
                                                            .WithAddmlFlatFileDefinition(new AddmlFlatFileDefinitionBuilder().Build())
                                                            .WithRecordProcess(A_16_ControlForeignKey.Name)
                                                            .WithForeignKey(addmlForeignKeyAttachment)
                                                            .WithForeignKey(addmlForeignKeyDocument)
                                                            .Build();
            _primaryKeyFieldDef = new AddmlFieldDefinitionBuilder()
                                  .WithRecordDefinition(_recordWithBothCombinedAndSingleForeignKeyDef)
                                  .WithName("Id")
                                  .IsPartOfPrimaryKey(true)
                                  .Build();
            _foreignKeyMessageIdFieldDef = new AddmlFieldDefinitionBuilder()
                                           .WithRecordDefinition(_recordWithBothCombinedAndSingleForeignKeyDef)
                                           .WithName("MessageId")
                                           .Build();
            _foreignKeyAttachmentNumberFieldDef = new AddmlFieldDefinitionBuilder()
                                                  .WithRecordDefinition(_recordWithBothCombinedAndSingleForeignKeyDef)
                                                  .WithName("AttachmentNumber")
                                                  .Build();

            addmlForeignKeyAttachment.ForeignKeys.Add(_foreignKeyMessageIdFieldDef);
            addmlForeignKeyAttachment.ForeignKeys.Add(_foreignKeyAttachmentNumberFieldDef);
            addmlForeignKeyAttachment.ForeignKeyReferenceIndexes.Add(_messageIdPrimaryKeyFieldDef.GetIndex());
            addmlForeignKeyAttachment.ForeignKeyReferenceIndexes.Add(_attachmentNumberPrimaryKeyFieldDef.GetIndex());
            addmlForeignKeyAttachment.ForeignKeyReferenceFields.Add(_messageIdPrimaryKeyFieldDef);
            addmlForeignKeyAttachment.ForeignKeyReferenceFields.Add(_attachmentNumberPrimaryKeyFieldDef);

            _foreignKeyDocumentIdFieldDef = new AddmlFieldDefinitionBuilder()
                                            .WithRecordDefinition(_recordWithBothCombinedAndSingleForeignKeyDef)
                                            .WithName("DocumentId")
                                            .Build();

            addmlForeignKeyDocument.ForeignKeys.Add(_foreignKeyDocumentIdFieldDef);
            addmlForeignKeyDocument.ForeignKeyReferenceIndexes.Add(_documentPrimaryKeyFieldDef.GetIndex());
            addmlForeignKeyDocument.ForeignKeyReferenceFields.Add(_documentPrimaryKeyFieldDef);
        }
        public AddmlFieldDefinition Build()
        {
            if (_addmlRecordDefinition == null)
            {
                _addmlRecordDefinition = new AddmlRecordDefinitionBuilder().Build();
            }

            var addmlFieldDefinition = _addmlRecordDefinition.AddAddmlFieldDefinition(_name,
                                                                                      _startPosition,
                                                                                      _fixedLength,
                                                                                      _dataType,
                                                                                      _isUnique,
                                                                                      _isNullable,
                                                                                      _minLength,
                                                                                      _maxLength,
                                                                                      _foreignKey?.GetIndex(),
                                                                                      _processes,
                                                                                      _codes,
                                                                                      _isPartOfPrimaryKey);

            addmlFieldDefinition.ForeignKey = _foreignKey;
            return(addmlFieldDefinition);
        }