示例#1
0
        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);
        }