internal static TypeUsage ValidateNewEntityWithRelationships( EntityType entityType, IEnumerable <DbExpression> attributeValues, IList <DbRelatedEntityRef> relationships, out DbExpressionList validArguments, out ReadOnlyCollection <DbRelatedEntityRef> validRelatedRefs) { TypeUsage typeUsage = ArgumentValidation.ValidateNew(ArgumentValidation.CreateResultType((EdmType)entityType), attributeValues, out validArguments); if (relationships.Count > 0) { List <DbRelatedEntityRef> relatedEntityRefList = new List <DbRelatedEntityRef>(relationships.Count); for (int index = 0; index < relationships.Count; ++index) { DbRelatedEntityRef relationship = relationships[index]; EntityTypeBase elementType = TypeHelpers.GetEdmType <RefType>(relationship.SourceEnd.TypeUsage).ElementType; if (!entityType.EdmEquals((MetadataItem)elementType) && !entityType.IsSubtypeOf((EdmType)elementType)) { throw new ArgumentException(Strings.Cqt_NewInstance_IncompatibleRelatedEntity_SourceTypeNotValid, StringUtil.FormatIndex(nameof(relationships), index)); } relatedEntityRefList.Add(relationship); } validRelatedRefs = new ReadOnlyCollection <DbRelatedEntityRef>((IList <DbRelatedEntityRef>)relatedEntityRefList); } else { validRelatedRefs = new ReadOnlyCollection <DbRelatedEntityRef>((IList <DbRelatedEntityRef>) new DbRelatedEntityRef[0]); } return(typeUsage); }