Exemple #1
0
        private NavigationEntryMetadata ValidateAndGetNavigationMetadata(
            string navigationProperty,
            Type requestedType,
            bool requireCollection)
        {
            if (InternalEntityEntry.SplitName(navigationProperty).Count != 1)
            {
                throw Error.DbEntityEntry_DottedPathMustBeProperty((object)navigationProperty);
            }
            NavigationEntryMetadata navigationMetadata = this.GetNavigationMetadata(navigationProperty);

            if (navigationMetadata == null)
            {
                throw Error.DbEntityEntry_NotANavigationProperty((object)navigationProperty, (object)this.EntityType.Name);
            }
            if (requireCollection)
            {
                if (navigationMetadata.MemberEntryType == MemberEntryType.ReferenceNavigationProperty)
                {
                    throw Error.DbEntityEntry_UsedCollectionForReferenceProp((object)navigationProperty, (object)this.EntityType.Name);
                }
            }
            else if (navigationMetadata.MemberEntryType == MemberEntryType.CollectionNavigationProperty)
            {
                throw Error.DbEntityEntry_UsedReferenceForCollectionProp((object)navigationProperty, (object)this.EntityType.Name);
            }
            if (!requestedType.IsAssignableFrom(navigationMetadata.ElementType))
            {
                throw Error.DbEntityEntry_WrongGenericForNavProp((object)navigationProperty, (object)this.EntityType.Name, (object)requestedType.Name, (object)navigationMetadata.ElementType.Name);
            }
            return(navigationMetadata);
        }
Exemple #2
0
        public virtual InternalMemberEntry Member(
            string propertyName,
            Type requestedType = null)
        {
            Type type = requestedType;

            if ((object)type == null)
            {
                type = typeof(object);
            }
            requestedType = type;
            IList <string> properties = InternalEntityEntry.SplitName(propertyName);

            if (properties.Count > 1)
            {
                return((InternalMemberEntry)this.Property((InternalPropertyEntry)null, propertyName, properties, requestedType, false));
            }
            MemberEntryMetadata memberEntryMetadata = (MemberEntryMetadata)this.GetNavigationMetadata(propertyName) ?? (MemberEntryMetadata)this.ValidateAndGetPropertyMetadata(propertyName, this.EntityType, requestedType);

            if (memberEntryMetadata == null)
            {
                throw Error.DbEntityEntry_NotAProperty((object)propertyName, (object)this.EntityType.Name);
            }
            if (memberEntryMetadata.MemberEntryType != MemberEntryType.CollectionNavigationProperty && !requestedType.IsAssignableFrom(memberEntryMetadata.MemberType))
            {
                throw Error.DbEntityEntry_WrongGenericForNavProp((object)propertyName, (object)this.EntityType.Name, (object)requestedType.Name, (object)memberEntryMetadata.MemberType.Name);
            }
            return(memberEntryMetadata.CreateMemberEntry(this, (InternalPropertyEntry)null));
        }
Exemple #3
0
 public InternalPropertyEntry Property(
     InternalPropertyEntry parentProperty,
     string propertyName,
     Type requestedType,
     bool requireComplex)
 {
     return(this.Property(parentProperty, propertyName, InternalEntityEntry.SplitName(propertyName), requestedType, requireComplex));
 }