Example #1
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="data">数据</param>
 /// <param name="columnOrdinals">列的位置集合</param>
 /// <param name="primaryKeyData">主键数据</param>
 /// <param name="opType">数据操作类型</param>
 public DataContextItem(Hashtable data, Dictionary <int, string> columnOrdinals, Dictionary <string, object> primaryKeyData,
                        DataAccessOpType opType)
     : this(data, columnOrdinals, opType)
 {
     this.primaryKeyData = primaryKeyData;
 }
Example #2
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="data">数据</param>
 /// <param name="columnOrdinals">列的位置集合</param>
 /// <param name="opType">数据操作类型</param>
 public DataContextItem(Hashtable data, Dictionary <int, string> columnOrdinals, DataAccessOpType opType)
 {
     this.data           = data;
     this.OpType         = opType;
     this.columnOrdinals = columnOrdinals;
 }
Example #3
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);
        }
Example #4
0
        /// <summary>
        /// 构造数据上下文
        /// </summary>
        /// <typeparam name="T">数据类型</typeparam>
        /// <param name="model">领域模型</param>
        /// <param name="opType">数据访问类型</param>
        /// <param name="data">数据</param>
        /// <returns>数据上下文</returns>
        public static DataContext CreateDataContext <T>(DomainModel.Spi.DomainModel model, DomainModel.Spi.DomainObject domainObject, DataAccessOpType opType, T data)
        {
            DataContext dataContext = null;

            switch (opType)
            {
            case DataAccessOpType.I:
                dataContext = CreateSaveContext(model, domainObject, data);
                break;

            case DataAccessOpType.Q:
                dataContext = CreateQueryContext(model, domainObject, data as IDictionary <string, object>);
                break;

            case DataAccessOpType.U:
                dataContext = CreateUpdateContext(model, domainObject, data);
                break;

            case DataAccessOpType.D:
                dataContext = CreateDeleteContext(model, domainObject, data as IDictionary <string, object>);
                break;

            default:
                break;
            }

            return(dataContext);
        }
Example #5
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);
                }
            }
        }