/// <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); } }
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); }
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); }
/// <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); } }
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); }