コード例 #1
0
ファイル: Read.cs プロジェクト: rajeshwarn/CodeArt-Framework
        /// <summary>
        /// 读取基础数据的集合值
        /// </summary>
        /// <param name="tip"></param>
        /// <param name="prmTip"></param>
        /// <param name="parent"></param>
        /// <param name="rootId"></param>
        /// <param name="masterId"></param>
        /// <param name="level"></param>
        /// <returns></returns>
        private object ReadValues(PropertyRepositoryAttribute tip, ParameterRepositoryAttribute prmTip, DomainObject parent, object rootId, object masterId, QueryLevel level)
        {
            using (var temp = SqlHelper.BorrowDatas())
            {
                var datas = temp.Item;
                QueryPrimitiveValues(rootId, masterId, datas);

                Type implementType = null;
                if (parent == null)
                {
                    //说明还在构造阶段,或者是内部调用
                    implementType = prmTip?.ImplementType ?? this.ObjectType; //middle表对应的是属性的基类类型
                }
                else
                {
                    implementType = this.ObjectType; //middle表对应的是属性的基类类型
                }
                var list        = CreateList(parent, implementType, tip.Property);
                var elementType = this.ElementType;

                var valueName = GeneratedField.PrimitiveValueName;
                foreach (var data in datas)
                {
                    var value = data.Get(valueName);
                    list.Add(value);
                }
                return(list);
            }
        }
コード例 #2
0
        private object ReadMembers(object parent, PropertyRepositoryAttribute tip, ParameterRepositoryAttribute prmTip, DynamicData data)
        {
            object rootId     = null;
            var    rootIdName = this.Type == DataTableType.AggregateRoot
                                            ? EntityObject.IdPropertyName
                                            : this.Root.TableIdName;

            if (data.TryGetValue(rootIdName, out rootId))
            {
                //当前对象的编号,就是子对象的masterId
                object masterId = null;
                data.TryGetValue(EntityObject.IdPropertyName, out masterId);

                var child = GetChildTableByRuntime(this, tip);
                return(child.ReadOneToMore(prmTip, parent, rootId, masterId));
            }
            return(null);
        }
コード例 #3
0
        public object ReadPropertyValue(object parent, PropertyRepositoryAttribute tip, ParameterRepositoryAttribute prmTip, DynamicData data)
        {
            //看对应的属性特性中是否定义了加载方法,优先执行自定义方法
            object value = null;

            if (tip.TryLoadData(this.ObjectType, data, out value))
            {
                return(value);
            }

            //自动加载
            switch (tip.DomainPropertyType)
            {
            case DomainPropertyType.Primitive:
            {
                return(ReadPrimitive(tip, data));
            }

            case DomainPropertyType.PrimitiveList:
            {
                return(ReadPrimitiveList(tip, data));
            }

            case DomainPropertyType.AggregateRoot:
            {
                return(ReadAggregateRoot(tip, data));
            }

            case DomainPropertyType.ValueObject:
            case DomainPropertyType.EntityObject:
            case DomainPropertyType.EntityObjectPro:
            {
                return(ReadMember(tip, data));
            }

            case DomainPropertyType.EntityObjectList:
            case DomainPropertyType.EntityObjectProList:
            case DomainPropertyType.ValueObjectList:
            case DomainPropertyType.AggregateRootList:
            {
                return(ReadMembers(parent, tip, prmTip, data));
            }
            }
            return(null);
        }
コード例 #4
0
        /// <summary>
        /// 1对多的引用关系的读取
        /// </summary>
        /// <param name="rootId"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        private object ReadOneToMore(ParameterRepositoryAttribute prmTip, object parent, object rootId, object masterId)
        {
            using (var temp = SqlHelper.BorrowDatas())
            {
                var datas = temp.Item;
                QueryRootAndSlaveIds(rootId, masterId, datas);

                Type implementType = null;
                if (parent == null)
                {
                    //说明还在构造阶段,或者是内部调用
                    implementType = prmTip?.ImplementType ?? this.Middle.ObjectType; //middle表对应的是属性的基类类型
                }
                else
                {
                    implementType = this.Middle.ObjectType; //middle表对应的是属性的基类类型
                }
                var list        = CreateList(implementType);
                var elementType = this.Middle.ElementType;

                if (this.Type == DataTableType.AggregateRoot)
                {
                    //引用了多个外部内聚根
                    var model       = DataModel.Create(elementType);
                    var root        = model.Root;
                    var slaveIdName = root.TableIdName;
                    var slaveTip    = root.ObjectTip;

                    if (slaveTip.Snapshot)  //如果外部内聚根是有快照的,那么当数据不存在时,加载快照
                    {
                        foreach (var data in datas)
                        {
                            var slaveId = data.Get(slaveIdName);
                            var item    = root.QuerySingle(slaveId, QueryLevel.None);
                            if (((IDomainObject)item).IsEmpty())
                            {
                                //加载快照
                                item = model.Snapshot.QuerySingle(slaveId, QueryLevel.None);
                            }
                            list.Add(item);
                        }
                    }
                    else
                    {
                        foreach (var data in datas)
                        {
                            var slaveId = data.Get(slaveIdName);
                            var item    = root.QuerySingle(slaveId, QueryLevel.None);
                            list.Add(item);
                        }
                    }
                }
                else
                {
                    var slaveIdName = this.TableIdName;
                    foreach (var data in datas)
                    {
                        var slaveId = data.Get(slaveIdName);
                        var item    = this.QuerySingle(rootId, slaveId);
                        if (!((IDomainObject)item).IsEmpty())
                        {
                            list.Add(item);
                        }
                    }
                }
                return(list);
            }
        }
コード例 #5
0
ファイル: Read.cs プロジェクト: rajeshwarn/CodeArt-Framework
        private object ReadPrimitiveList(DomainObject parent, PropertyRepositoryAttribute tip, ParameterRepositoryAttribute prmTip, DynamicData data, QueryLevel level)
        {
            object rootId     = null;
            var    rootIdName = this.Type == DataTableType.AggregateRoot
                                            ? EntityObject.IdPropertyName
                                            : GeneratedField.RootIdName;

            if (data.TryGetValue(rootIdName, out rootId))
            {
                //当前对象的编号,就是子对象的masterId
                object masterId = null;
                data.TryGetValue(EntityObject.IdPropertyName, out masterId);

                var child = GetChildTableByRuntime(this, tip);
                return(child.ReadValues(tip, prmTip, parent, rootId, masterId, level));
            }
            return(null);
        }