private ProjectionMetadataFlags GetFlags(ProjectionMetadata metadata) { IdAttribute id = metadata.Relation.Annotations?.OfType <IdAttribute>().FirstOrDefault(); OutAttribute out0 = metadata.Relation.Annotations?.OfType <OutAttribute>().FirstOrDefault(); InAttribute in0 = metadata.Relation.Annotations?.OfType <InAttribute>().FirstOrDefault(); IReferenceMetadata reference = metadata.Identity.GetMetadata <IReferenceMetadata>(); ProjectionMetadataFlags flags = ProjectionMetadataFlags.None; if (id != null) { flags |= ProjectionMetadataFlags.Identity; } if (in0 != null || out0 != null) { flags |= in0 != null ? ProjectionMetadataFlags.Input : ProjectionMetadataFlags.None; flags |= out0 != null ? ProjectionMetadataFlags.Output : ProjectionMetadataFlags.None; } else if (id != null) { flags |= ProjectionMetadataFlags.Output; } else if (reference != null && reference.HasAnyFlag(ReferenceMetadataFlags.Key)) { flags |= ProjectionMetadataFlags.Input | ProjectionMetadataFlags.Output; } else { flags |= ProjectionMetadataFlags.Input; } return(flags); }