58 lines
1.9 KiB
C#
58 lines
1.9 KiB
C#
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}";
|
|
}
|
|
}
|
|
}
|
|
|