protected override IEnumerable <object> EnumerateReferences(MsBuildItem record)
        {
            yield return(record.ElementName);

            yield return(record.MsBuildCondition);

            yield return(record.MsBuildItemAttributeList);
        }
        protected override async Task <MsBuildItem> AssignUpsertedReferences(MsBuildItem record)
        {
            record.ElementName = await _strings.UpsertAsync(record.ElementName);

            record.ElementNameId    = record.ElementName?.AsciiStringReferenceId ?? record.ElementNameId;
            record.MsBuildCondition = await _conditions.UpsertAsync(record.MsBuildCondition);

            record.MsBuildConditionId       = record.MsBuildCondition?.MsBuildConditionId ?? record.MsBuildConditionId;
            record.MsBuildItemAttributeList = await _attributes.UpsertAsync(record.MsBuildItemAttributeList);

            record.MsBuildItemAttributeListId = record.MsBuildItemAttributeList?.MsBuildItemAttributeListId ?? record.MsBuildItemAttributeListId;
            return(record);
        }
 protected override Expression <Func <MsBuildItem, bool> > FindExisting(MsBuildItem record)
 => existing
 => existing.ElementNameId == record.ElementNameId &&
 existing.MsBuildItemAttributeListId == record.MsBuildItemAttributeListId &&
 ((existing.MsBuildConditionId == null && record.MsBuildConditionId == null) || (existing.MsBuildConditionId == record.MsBuildConditionId));