public override ISqlParam Insert() { base.Insert(); // 主键如果有值,则需要 SET IDENTITY_INSERT ON if (ExpBuilder.Map.FieldMap.PrimaryState.Key != null && !string.IsNullOrWhiteSpace(ExpBuilder.Map.FieldMap.PrimaryState.Value.FieldAtt.Name)) { var indexHaveValue = new GetMemberVisitor().Visit(ExpBuilder.ExpAssign).Any(o => o.Member as PropertyInfo == ExpBuilder.Map.FieldMap.PrimaryState.Key); if (indexHaveValue) { Sql.AppendFormat("SET IDENTITY_INSERT {0} ON ; {1} ; SET IDENTITY_INSERT {0} OFF;", Name, Sql); } } return(this); }
/// <summary> /// 合并NewExpression /// </summary> /// <param name="exps">要合并的NewExpression</param> public static Expression MergeNewExpression(params Expression[] exps) { // 获取表达式树中实体类型 var parentType = new GetParamVisitor().Visit(exps[0]).Select(o => o.Type).First(); // 取得所有PropertyInfo var lst = new GetMemberVisitor().Visit(exps).Select(o => (PropertyInfo)o.Member); // 构造函数参数类型 var lstPropertyType = lst.Select(o => o.PropertyType).ToArray(); // 根据取得的PropertyInfo列表,创建新类型 var classType = CacheManger.CreateClass(null, lstPropertyType, parentType); // 获取新类型的构造函数 var constructor = classType.GetConstructor(lstPropertyType); // 创建构造函数的参数表达式数组 var constructorParam = BuildConstructorsParameters(classType, lst); return(Expression.New(constructor, constructorParam)); }