//创建一个验证信息。 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); }
/// <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++); } } }