Пример #1
0
        private void ProcessOneToManyListMember(EntityMemberInfo member)
        {
            var listInfo = member.ChildListInfo = new ChildEntityListInfo(member);

            listInfo.RelationType = EntityRelationType.ManyToOne;
            var entType    = member.Entity.EntityType;
            var targetType = member.DataType.GetGenericArguments()[0];

            listInfo.TargetEntity = this.Model.GetEntityInfo(targetType, true);
            var oneToManyAttr  = member.Attributes.OfType <OneToManyAttribute>().FirstOrDefault();
            var thisEntRefName = oneToManyAttr?.ThisEntityRef;

            if (!string.IsNullOrEmpty(thisEntRefName))
            {
                var fkMember = listInfo.TargetEntity.GetMember(thisEntRefName);
                if (fkMember == null)
                {
                    this.Log.Error("Entity list member {0}: could not find property '{1}' in target entity. ",
                                   member.ToString(), thisEntRefName);
                    return;
                }
                oneToManyAttr.ThisEntityRef = fkMember.MemberName;
                listInfo.ParentRefMember    = fkMember;
            }
            else
            {
                // no explicit attr
                listInfo.ParentRefMember = listInfo.TargetEntity.FindEntityRefMember(null, entType, member, this.Log);
            }
            //Check that reference is found
            if (listInfo.ParentRefMember == null)
            {
                this.Log.Error("EntityList member {0}: could not find reference property in target entity. ", member.ToString());
            }
            else
            {
                //Set back reference to list from ref member
                listInfo.ParentRefMember.ReferenceInfo.TargetListMember = member;
            }
            //Filter - not implemented in .NET core version

            /*
             * if(oneToManyAttr != null && !string.IsNullOrWhiteSpace(oneToManyAttr.Filter))
             * listInfo.Filter = ParseFilter(oneToManyAttr.Filter, listInfo.TargetEntity, this.Log);
             */
        } //method