using Dapper; using VolPro.Core.Configuration; using VolPro.Core.EFDbContext; using VolPro.Core.Extensions.AutofacManager; using VolPro.Core.UserManager; using VolPro.Entity.DomainModels; namespace VolPro.Core.Generic { public class GenericSqlServerProvider : GenericDbProviderBase { protected override string LeftQuote => "["; protected override string RightQuote => "]"; public GenericSqlServerProvider() : base() { } protected override string BuildPageSql(string baseWithWhereSql, string selectColumns, string orderBy, int page, int rows) { int offset = (page - 1) * rows; int end = page * rows; if (AppSetting.UseSqlserver2008) { return $@" SELECT {selectColumns} FROM ( SELECT ROW_NUMBER() OVER ({orderBy}) AS RowNum, {selectColumns} FROM ( {baseWithWhereSql} ) AS S ) AS X WHERE X.RowNum BETWEEN {offset + 1} AND {end} ORDER BY X.RowNum"; } return $@" SELECT {selectColumns} FROM ( {baseWithWhereSql} ) AS S {orderBy} OFFSET {offset} ROWS FETCH NEXT {rows} ROWS ONLY"; } protected override string BuildIdentitySql(TableColumnField keyColumn, bool batch = false) { // 单条插入:使用 SCOPE_IDENTITY() if (!batch) { return $";SELECT SCOPE_IDENTITY();"; } // 批量插入:使用 OUTPUT INSERTED.[Id],由上层拼接在 VALUES 之前 return $" OUTPUT INSERTED.{LeftQuote}{keyColumn.ColumnName}{RightQuote}"; } } }