Exemplo n.º 1
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));
        }