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