Example #1
0
        internal static Expression GetInsertExpression(ISyntaxProvider syntax, Expression instance)
        {
            InsertCommandExpression insertExp;
            var entityType = instance.Type;
            Func <TableExpression, IEnumerable <ColumnAssignment> > func;

            if (instance is ParameterExpression parExp)
            {
                func = new Func <TableExpression, IEnumerable <ColumnAssignment> >(t => GetInsertArguments(syntax, t, parExp));
            }
            else
            {
                var entity = instance.As <ConstantExpression>().Value as IEntity;
                func = new Func <TableExpression, IEnumerable <ColumnAssignment> >(t => GetInsertArguments(syntax, t, entity));
            }

            var metadata = EntityMetadataUnity.GetEntityMetadata(entityType);
            var table    = new TableExpression(new TableAlias(), metadata.TableName, entityType);

            insertExp = new InsertCommandExpression(table, func(table))
            {
                WithAutoIncrement = !string.IsNullOrEmpty(syntax.IdentitySelect) && HasAutoIncrement(instance.Type)
            };

            return(insertExp);
        }
Example #2
0
        protected override Expression VisitInsert(InsertCommandExpression insert)
        {
            if (insert.Assignments.Count == 0)
            {
                return(Expression.Constant(-1));
            }

            var arguments = VisitColumnAssignments(insert.Assignments);

            insert = insert.Update(insert.Table, arguments);

            return(insert.WithAutoIncrement ? BuildExecuteScalarCommand(insert) :
                   BuildExecuteNoQueryCommand(insert));
        }
        /// <summary>
        /// 访问 <see cref="InsertCommandExpression"/> 表达式。
        /// </summary>
        /// <param name="insert"></param>
        /// <returns></returns>
        protected override Expression VisitInsert(InsertCommandExpression insert)
        {
            _isAsync = _isAsync || insert.IsAsync;

            //如果没有更新参数,则返回-1
            if (insert.Assignments.Count == 0)
            {
                return(_isAsync ? Expression.Constant(Task.FromResult(-1)) : Expression.Constant(-1));
            }

            var arguments = VisitColumnAssignments(insert.Assignments);

            insert = insert.Update(insert.Table, arguments);

            return(insert.WithAutoIncrement ? BuildExecuteScalarCommand(insert) :
                   BuildExecuteNoQueryCommand(insert));
        }