Beispiel #1
0
        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);
        }
Beispiel #2
0
        /// <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));
        }