public override string ToString()
        {
            var returnString =
                $"Key: {Key.ToKeyString()}," +
                $" Text: {Text}," +
                $" CreateOnlyParent: {CreateOnlyParent.ToShortString()}," +
                $" CreateOnlyParentReadonly: {CreateOnlyParentReadonly.ToShortString()}," +
                $" CreateOnlyParentNullable: {CreateOnlyParentNullable?.ToShortString()}," +
                $" CreateOnlyParentNullableReadonly: {CreateOnlyParentNullableReadonly?.ToShortString()};";

            onToString(ref returnString);
            return(returnString);
        }
        public string ToTraceString()
        {
            var returnString =
                $"{this.GetKeyOrHash()}|" +
                $" {Text}|" +
                $" CreateOnlyParent {CreateOnlyParent.GetKeyOrHash()}|" +
                $" CreateOnlyParentReadonly {CreateOnlyParentReadonly.GetKeyOrHash()}|" +
                $" CreateOnlyParentNullable {CreateOnlyParentNullable?.GetKeyOrHash()}|" +
                $" CreateOnlyParentNullableReadonly {CreateOnlyParentNullableReadonly?.GetKeyOrHash()}";

            onToTraceString(ref returnString);
            return(returnString);
        }
        public string ToShortString()
        {
            var returnString =
                $"{Key.ToKeyString()}," +
                $" {Text}," +
                $" {CreateOnlyParent.ToShortString()}," +
                $" {CreateOnlyParentReadonly.ToShortString()}," +
                $" {CreateOnlyParentNullable?.ToShortString()}," +
                $" {CreateOnlyParentNullableReadonly?.ToShortString()}";

            onToShortString(ref returnString);
            return(returnString);
        }
        private ChildrenList_CreateOnlyChild(int key, CsvReader csvReader)
        {
            Key  = key;
            Text = csvReader.ReadString();
            var childrenList_CreateOnlyParentKey = csvReader.ReadInt();

            if (DC.Data.ChildrenList_CreateOnlyParents.TryGetValue(childrenList_CreateOnlyParentKey, out var createOnlyParent))
            {
                CreateOnlyParent = createOnlyParent;
            }
            else
            {
                throw new Exception($"Read ChildrenList_CreateOnlyChild from CSV file: Cannot find CreateOnlyParent with key {childrenList_CreateOnlyParentKey}." + Environment.NewLine +
                                    csvReader.PresentContent);
            }
            var childrenList_CreateOnlyParentReadonlyKey = csvReader.ReadInt();

            if (DC.Data.ChildrenList_CreateOnlyParentReadonlys.TryGetValue(childrenList_CreateOnlyParentReadonlyKey, out var createOnlyParentReadonly))
            {
                CreateOnlyParentReadonly = createOnlyParentReadonly;
            }
            else
            {
                throw new Exception($"Read ChildrenList_CreateOnlyChild from CSV file: Cannot find CreateOnlyParentReadonly with key {childrenList_CreateOnlyParentReadonlyKey}." + Environment.NewLine +
                                    csvReader.PresentContent);
            }
            var createOnlyParentNullableKey = csvReader.ReadIntNull();

            if (createOnlyParentNullableKey.HasValue)
            {
                if (DC.Data.ChildrenList_CreateOnlyParentNullables.TryGetValue(createOnlyParentNullableKey.Value, out var createOnlyParentNullable))
                {
                    CreateOnlyParentNullable = createOnlyParentNullable;
                }
                else
                {
                    CreateOnlyParentNullable = ChildrenList_CreateOnlyParentNullable.NoChildrenList_CreateOnlyParentNullable;
                }
            }
            var createOnlyParentNullableReadonlyKey = csvReader.ReadIntNull();

            if (createOnlyParentNullableReadonlyKey.HasValue)
            {
                if (DC.Data.ChildrenList_CreateOnlyParentNullableReadonlys.TryGetValue(createOnlyParentNullableReadonlyKey.Value, out var createOnlyParentNullableReadonly))
                {
                    CreateOnlyParentNullableReadonly = createOnlyParentNullableReadonly;
                }
                else
                {
                    CreateOnlyParentNullableReadonly = ChildrenList_CreateOnlyParentNullableReadonly.NoChildrenList_CreateOnlyParentNullableReadonly;
                }
            }
            if (CreateOnlyParent != ChildrenList_CreateOnlyParent.NoChildrenList_CreateOnlyParent)
            {
                CreateOnlyParent.AddToChildrenList_CreateOnlyChildren(this);
            }
            if (CreateOnlyParentReadonly != ChildrenList_CreateOnlyParentReadonly.NoChildrenList_CreateOnlyParentReadonly)
            {
                CreateOnlyParentReadonly.AddToChildrenList_CreateOnlyChildren(this);
            }
            if (createOnlyParentNullableKey.HasValue && CreateOnlyParentNullable != ChildrenList_CreateOnlyParentNullable.NoChildrenList_CreateOnlyParentNullable)
            {
                CreateOnlyParentNullable !.AddToChildrenList_CreateOnlyChildren(this);
            }
            if (createOnlyParentNullableReadonlyKey.HasValue && CreateOnlyParentNullableReadonly != ChildrenList_CreateOnlyParentNullableReadonly.NoChildrenList_CreateOnlyParentNullableReadonly)
            {
                CreateOnlyParentNullableReadonly !.AddToChildrenList_CreateOnlyChildren(this);
            }
            onCsvConstruct();
        }