Ejemplo n.º 1
0
        //创建一个验证信息。
        private PropertyValidatedInfo createInfo(Expression <Func <T, object> > columnName, out PropertyInfo colInfo)
        {
            var colName = MB.Util.Expressions.ExpressionHelper.GetPropertyName <T>(columnName);

            if (string.IsNullOrEmpty(colName))
            {
                throw new MB.Util.APPException(string.Format("根据表达式{0} 获取不到属性的名称,请检查", columnName), Util.APPMessageType.SysErrInfo);
            }

            if (this.ContainsKey(colName))
            {
                throw new MB.Util.APPException(string.Format("当前集合中已经包含属性{0}", colName), Util.APPMessageType.SysErrInfo);
            }

            var temp = typeof(T).GetProperty(colName);

            if (temp == null)
            {
                throw new MB.Util.APPException(string.Format("根据表达式{0} 获取不到属性的名称,请检查是否为public property", columnName), Util.APPMessageType.SysErrInfo);
            }
            colInfo = temp;
            var newInfo = new PropertyValidatedInfo()
            {
                Name = colName
            };

            this.Add(colInfo.Name, newInfo);

            if (_CreateAC)
            {
                Util.Emit.DynamicPropertyAccessor ac = new Util.Emit.DynamicPropertyAccessor(typeof(T), colInfo);
                _QuickDataAccess[colInfo.Name] = ac;
            }
            return(newInfo);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 批量刷新待存储的实体对象的主键,如果是主表的话要注意子表是否有关联。
        /// 特殊说明:不建议刷新主表的主键。
        /// 主键名称只支持名称为 ID;     if (entity.GetType().IsSubclassOf(typeof(MB.Orm.Common.BaseModel))) {
        /// </summary>
        /// <param name="dataInDocType">需要刷新主键的实体类型。</param>
        protected virtual void BatchSettingNewEntityID(int dataInDocType)
        {
            var entitys = from item in _ObjectDataList.Values
                          where (item.ObjectData as MB.Orm.Common.BaseModel) != null &&
                          ((MB.Orm.Common.BaseModel)item.ObjectData).EntityState == EntityState.New &&
                          (int)item.DataInDocType == dataInDocType
                          select item.ObjectData;
            int count = entitys.Count();

            if (count > 0)
            {
                int ids = this.GetCreateNewEntityIds(dataInDocType, count);
                MB.Util.Emit.DynamicPropertyAccessor ac = new Util.Emit.DynamicPropertyAccessor(entitys.First().GetType(), "ID");

                foreach (var entity in entitys)
                {
                    ac.Set(entity, ids++);
                }
            }
        }