コード例 #1
0
        public override string ToSql()
        {
            if (Fields == null || !Fields.Any())
            {
                return(string.Empty);
            }

            var sqlBuilder       = new StringBuilder();
            var insertableFields = GetInsertableFields();

            // This should never happen
            if (insertableFields == null)
            {
                return(string.Empty);
            }

            insertableFields = insertableFields.Where(fld => !_unsupportedTypes.Contains(fld.ColumnDataType));

            var parameterSign        = EntityMapper.SqlGenerator.DriverParameterIndicator;
            var insertableFieldNames = insertableFields.Select(fld => fld.ColumnName);
            var valuesParameters     = string.Format("{0}", string.Join(",", insertableFields.Select(i => parameterSign + i.ColumnName)));
            var formattedFields      = SqlServerHelper.BraketFieldNames(insertableFieldNames);
            var autoIncrementField   = EntityMapper.Entities[typeof(T)].Properties.Where(p => p.IsAutoIncrement).FirstOrDefault();

            if (autoIncrementField != null)
            {
                sqlBuilder.Append(GenerateTempTableSql());

                sqlBuilder.AppendFormat("INSERT INTO {0}[{1}].[{2}] ({3}) {4} ",
                                        EntityMapper.SqlGenerator.IncludeDbNameInQuery ? string.Format("[{0}].", DatabaseName) : "",
                                        SchemaName,
                                        TableName,
                                        string.Format("{0}", string.Join(",", formattedFields)),
                                        string.Format("OUTPUT {0} INTO {1}", GetAllFields(useInsertedPrefix: true), _tempTableName));

                var valuesClause = "VALUES ({0}); {1};";

                var returnEntity = string.Format("SELECT TOP 1 {0} FROM {1}", GetAllFields(), _tempTableName);

                sqlBuilder.AppendFormat(valuesClause, valuesParameters, returnEntity);
            }
            else
            {
                sqlBuilder.AppendFormat("INSERT INTO {0}[{1}].[{2}] ({3}) VALUES ({4});",
                                        EntityMapper.SqlGenerator.IncludeDbNameInQuery ? string.Format("[{0}].", DatabaseName) : "",
                                        SchemaName,
                                        TableName,
                                        string.Format("{0}", string.Join(",", formattedFields)),
                                        string.Format("{0}", string.Join(",", valuesParameters)));

                var query = new SqlServerSelectQuery <T>();
                query = EntityStore.GetQueryByKey <T>(this.Entity, query) as SqlServerSelectQuery <T>;
                query.GetTopRows(1);

                Parameters.AddDynamicParams(query.Parameters);
                sqlBuilder.Append(query.ToSql());
            }

            return(sqlBuilder.ToString());
        }
コード例 #2
0
        /// <summary>
        /// Creates a filtered select statement
        /// </summary>
        /// <typeparam name="T">Enity type</typeparam>
        /// <param name="expression">Expression by which the enitity set is to be filtered</param>
        /// <returns></returns>
        public SelectQuery <T> Select <T>(Expression <Func <T, bool> > expression)
        {
            var select = new SqlServerSelectQuery <T>();

            return(select.Where(expression) as SqlServerSelectQuery <T>);
        }