예제 #1
0
        /// <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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
                }
            }
        }
예제 #4
0
        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);
        }