/// <summary> /// 构造ShardingValue /// </summary> /// <param name="domainModel">领域模型</param> /// <param name="instance">数据</param> /// <returns>ShardingValue</returns> private ShardingValue CreateShardingValue(DomainModel.Spi.DomainModel domainModel, DomainModel.Spi.DomainObject domainObject, object instance) { ShardingValue shardingValue = null; var shardingColumn = domainObject.DataObject.Columns.FirstOrDefault(i => i.IsShardingColumn); if (shardingColumn == null) { throw new Exception("DataObject unset sharding column:" + domainObject.DataObjectID); } var shardingElement = domainObject.Elements.FirstOrDefault(i => i.DataColumnID == shardingColumn.ID); var propValue = ObjectPropertyValueUtils.GetPropValue(shardingElement.PropertyName, instance); switch (shardingElement.DataType) { case ElementDataType.DateTime: case ElementDataType.Date: shardingValue = new ShardingValue(domainModel.Name, shardingElement.ID, Convert.ToDateTime(propValue)); break; case ElementDataType.Integer: shardingValue = new ShardingValue(domainModel.Name, shardingElement.ID, Convert.ToInt64(propValue)); break; case ElementDataType.String: default: shardingValue = new ShardingValue(domainModel.Name, shardingElement.ID, Convert.ToString(propValue)); break; } return(shardingValue); }
protected static DataContext CreateUpdateContext(DomainModel.Spi.DomainModel model, DomainModel.Spi.DomainObject domainObject, object data) { var context = new DataContext(); var dataContextItem = GetModelObjectPropValue(data, domainObject, DataAccessOpType.U, true); context.Add(domainObject.ID, new List <DataContextItem>() { dataContextItem }); if (domainObject.ChildDomainObjects.Count > 0) { foreach (var childModelObject in domainObject.ChildDomainObjects) { var objectList = ObjectPropertyValueUtils.GetCollectionPropValue(childModelObject.PropertyName, data); var items = new List <DataContextItem>(objectList.Count()); foreach (var obj in objectList) { items.Add(GetModelObjectPropValue(obj, childModelObject, DataAccessOpType.U, true)); LoopGetModelObjectPropValue(childModelObject, context, obj, DataAccessOpType.U, true); } context.Add(childModelObject.ID, items); } } return(context); }
private static void LoopGetModelObjectPropValue(DomainModel.Spi.DomainObject domainObject, DataContext context, object data, DataAccessOpType opType, bool isUseDbNull) { if (domainObject.ChildDomainObjects.Count > 0) { foreach (var childModelObject in domainObject.ChildDomainObjects) { var objectList = ObjectPropertyValueUtils.GetCollectionPropValue(childModelObject.PropertyName, data); var items = new List <DataContextItem>(objectList.Count()); foreach (var obj in objectList) { items.Add(GetModelObjectPropValue(obj, childModelObject, opType, isUseDbNull)); } context.Add(childModelObject.ID, items); } } }
private static DataContextItem GetModelObjectPropValue(object data, DomainModel.Spi.DomainObject domainObject, DataAccessOpType opType, bool isUseDbNull) { var dataContextItem = new DataContextItem() { OpType = opType }; foreach (var element in domainObject.Elements) { if (string.IsNullOrWhiteSpace(element.PropertyName)) { continue; } bool isPkElement = domainObject.DataObject.Columns.FirstOrDefault(i => i.ID == element.DataColumnID).IsPkColumn; var propValue = ObjectPropertyValueUtils.GetPropValue(element.PropertyName, data); if (propValue != null) { dataContextItem.Data.Add(element.ID, propValue); if (isPkElement) { dataContextItem.PrimaryKeyData.Add(element.ID, propValue); } } else if (isUseDbNull) { dataContextItem.Data.Add(element.ID, DBNull.Value); if (isPkElement) { dataContextItem.PrimaryKeyData.Add(element.ID, DBNull.Value); } } } foreach (var association in domainObject.Associations) { if (association.AssociateType == AssociateType.InnerJoin) { continue; } var associationObject = ObjectPropertyValueUtils.GetPropValue(association.PropertyName, data); foreach (var assoItem in association.Items) { var element = association.AssoDomainObject.Elements.FirstOrDefault(i => i.ID == assoItem.TargetElementID); if (element == null) { throw new Exception("Invalid Association:" + assoItem.TargetElementID); } var propValue = ObjectPropertyValueUtils.GetPropValue(element.PropertyName, associationObject); if (propValue != null) { dataContextItem.Data.Add(assoItem.SourceElementID, propValue); } else if (isUseDbNull) { dataContextItem.Data.Add(assoItem.SourceElementID, DBNull.Value); } } } return(dataContextItem); }