using FreeSql;
using FreeSql.DataAnnotations;
using kwlib;
using Microsoft.Data.SqlClient;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading;
using Xunit;
namespace FreeSql.Tests
{
public class UnitTest2
{
public partial class SysModulePermission
{
///
/// 菜单权限ID
///
[Column(IsPrimary = true, OldName = "SysModulePermissionId")]
public String Id { get; set; }
///
/// 菜单主键ID
///
public String SysModuleId { get; set; }
///
/// 按钮主键ID
///
public String SysModuleButtonId { get; set; }
///
/// 菜单权限
///
public Int32 Status { get; set; }
}
public partial class SysModule
{
///
/// 主键
///
[Column(IsPrimary = true, OldName = "SysModuleId")]
public String Id { get; set; }
///
/// 父级ID
///
public String ParentId { get; set; }
///
/// 名称
///
public String Name { get; set; }
///
/// 图标
///
public String Icon { get; set; }
///
/// 链接地址
///
public String UrlAddress { get; set; }
///
/// 是否公开
///
public Int32 IsShow { get; set; }
///
/// 排序
///
public Int32? Sort { get; set; }
///
/// 备注
///
public String Description { get; set; }
///
/// 创建日期
///
public DateTime CreateTime { get; set; }
}
public partial class SysModuleButton
{
///
/// 按钮主键
///
[Column(IsPrimary = true, OldName = "SysModuleButtonId")]
public String Id { get; set; }
///
/// 名称
///
public String Name { get; set; }
///
/// 事件名称
///
public String EventName { get; set; }
///
/// 编码
///
public String EnCode { get; set; }
///
/// 图标
///
public String Icon { get; set; }
///
/// 排序
///
public Int32? Sort { get; set; }
///
/// 创建日期
///
public DateTime CreateTime { get; set; }
}
partial class SysModulePermission
{
[Navigate("SysModuleButtonId")]
public SysModuleButton Button { get; set; }
}
partial class SysModule
{
[Navigate("SysModuleId")]
public List Permissions { get; set; }
}
partial class SysModuleButton
{
}
public class LinUser
{
public long id { get; set; }
public string name { get; set; }
public string nick { get; set; }
}
public class Comment
{
public Guid Id { get; set; }
///
/// 回复的文本内容
///
public string Text { get; set; }
[Navigate("CreateUserId")]
public LinUser UserInfo { get; set; }
public long? CreateUserId { get; set; }
}
public class UserLike
{
public Guid Id { get; set; }
public Guid SubjectId { get; set; }
public long? CreateUserId { get; set; }
}
public class TestMySqlStringIsNullable
{
public Guid id { get; set; }
public string nvarchar { get; set; }
[Column(IsNullable = true)]
public string nvarchar_null { get; set; }
[Column(IsNullable = false)]
public string nvarchar_notnull { get; set; }
[Column(DbType = "varchar(100)")]
public string varchar { get; set; }
[Column(IsNullable = true, DbType = "varchar(100)")]
public string varchar_null { get; set; }
[Column(IsNullable = false, DbType = "varchar(100)")]
public string varchar_notnull { get; set; }
}
public class TestIgnoreDefaultValue {
public Guid Id { get; set; }
[Column(IsIgnore = true)]
public double? quantity { get; set; } = 100f;
public DateTime ct1 { get; set; }
public DateTime? ct2 { get; set; }
}
public class TBatInst
{
public Guid Id { get; set; }
public string Name { get; set; }
}
public class gf_t1
{
public Guid id { get; set; }
public int rowstate { get; set; }
}
public class gf_t2
{
public Guid id { get; set; }
public decimal rowstate { get; set; }
}
public class gf_t3
{
public Guid id { get; set; }
public decimal rowstate { get; set; }
}
public class gfDto
{
public int rowstate { get; set; }
public dfDto2 dto2 { get; set; }
}
public class dfDto2
{
public int id { get; set; }
public decimal rowstate { get; set; }
}
public class otot1
{
[Column(IsIdentity = true)]
public int id { get; set; }
public string name { get; set; }
public otot2 t2 { get; set; }
}
public class otot2
{
[Column(IsIdentity = true)]
public int id { get; set; }
public string title { get; set; }
}
public class otot3 : otot1
{
}
[Fact]
public void Test02()
{
g.sqlite.GlobalFilter
.ApplyOnly("id1", a => a.name == "123");
var sqlonly = g.sqlite.Select()
.InnerJoin((a, b, c) => a.id == b.id)
.InnerJoin((a, b, c) => b.id == c.id)
.ToSql();
g.sqlite.Update(Guid.Empty).Set(a => a.ct1 == a.ct2).ExecuteAffrows();
g.sqlite.Insert(new otot1 { name = "otot1_name1" }).ExecuteAffrows();
var otolst1 = g.sqlite.Select()
.LeftJoin(a => a.id == a.t2.id)
.ToList();
var otolst2 = g.sqlite.Select()
.LeftJoin((a, b) => a.id == b.id)
.ToList((a, b) => new
{
a,
b
});
var testcf = g.sqlite.CodeFirst.GetComparisonDDLStatements(typeof(dfDto2), "main.test2");
var u1 = new userinfo {
name = "111",
departments = new List(new[]{
new departments { deptname = "dep1" },
new departments { deptname = "dep1" }
})
};
var kwrepo = g.sqlite.GetRepository();
kwrepo.Insert(u1);
g.sqlite.GlobalFilter.ApplyIf("random_filter", () => new Random().Next(0, 2) % 2 == 0 ? true : false, a => a.rowstate > 0);
Enumerable.Range(0, 10).ToList().ForEach(aidx =>
{
var sql1 = g.sqlite.Select().ToSql();
});
g.sqlite.GlobalFilter.Apply("gft1", a => a.rowstate > -1 && g.sqlite.Select().Any(b => b.id == a.id))
.Apply("gft2", a => a.rowstate > -2)
.Apply("gft3", a => a.rowstate > -3)
.Apply("gft11", a => a.rowstate > -1);
var tksk1 = g.sqlite.Select()
.InnerJoin((a, b, c) => a.id == b.id)
.Where((a, b, c) => c.rowstate > 10)
.ToList();
g.sqlite.Update().NoneParameter().Set(a => a.rowstate + 1).Where(a => a.rowstate >= 0).ExecuteAffrows();
var tksk2 = g.sqlite.Select()
.InnerJoin((a, b, c) => a.id == b.id)
.Where((a, b, c) => c.rowstate > 10)
.ToList();
g.sqlite.Update().NoneParameter().Set(a => a.rowstate + 1).Where(a => a.rowstate >= 0).ExecuteAffrows();
var dddd2sql1 = g.sqlite.Select()
.DisableGlobalFilter()
.ToUpdate()
//.DisableGlobalFilter()
.Set(a => a.rowstate, 10)
.ToSql();
var dtot2 = g.sqlite.Select().ToList(a => new gfDto
{
dto2 = new dfDto2
{
rowstate = a.rowstate
}
});
var repo_dtot22 = g.sqlite.GetRepository();
var dtot221 = repo_dtot22.Select.ToList(a => new gfDto
{
dto2 = new dfDto2
{
rowstate = a.rowstate
}
});
repo_dtot22.DbContextOptions.EnableGlobalFilter = false;
var dtot222 = repo_dtot22.Select.ToList(a => new gfDto
{
dto2 = new dfDto2
{
rowstate = a.rowstate
}
});
//List<(Guid, DateTime)> contains2linqarr = new List<(Guid, DateTime)>();
//Assert.Equal("SELECT 1 as1 FROM \"TestIgnoreDefaultValue\" a WHERE (1=0)", g.sqlite.Select().Where(a => contains2linqarr.Contains(a.Id, a.ct1)).ToSql(a => 1).Replace("\r\n", ""));
//g.sqlite.Select().Where(a => contains2linqarr.Contains(a.Id, a.ct1)).ToList();
//contains2linqarr.Add((Guid.NewGuid(), DateTime.Now));
//contains2linqarr.Add((Guid.NewGuid(), DateTime.Now));
//contains2linqarr.Add((Guid.NewGuid(), DateTime.Now));
//g.sqlite.Select()
// .Where(a => contains2linqarr.Contains(a.Id, a.ct1)).ToList();
//List<(Guid, DateTime, DateTime?)> contains3linqarr = new List<(Guid, DateTime, DateTime?)>();
//Assert.Equal("SELECT 1 as1 FROM \"TestIgnoreDefaultValue\" a WHERE (1=0)", g.sqlite.Select().Where(a => contains3linqarr.Contains(a.Id, a.ct1, a.ct2)).ToSql(a => 1).Replace("\r\n", ""));
//g.sqlite.Select().Where(a => contains3linqarr.Contains(a.Id, a.ct1, a.ct2)).ToList();
//contains3linqarr.Add((Guid.NewGuid(), DateTime.Now, DateTime.Now));
//contains3linqarr.Add((Guid.NewGuid(), DateTime.Now, DateTime.Now));
//contains3linqarr.Add((Guid.NewGuid(), DateTime.Now, DateTime.Now));
//g.sqlite.Select().Where(a => contains3linqarr.Contains(a.Id, a.ct1, a.ct2)).ToList();
var start = DateTime.Now.Date;
var end = DateTime.Now.AddDays(1).Date.AddMilliseconds(-1);
var textbetween = g.sqlite.Select()
.Where(a => a.ct1.Between(start, end))
.ToList();
var textbetweenend = g.sqlite.Select()
.Where(a => a.ct1.BetweenEnd(start, end))
.ToList();
g.mysql.GlobalFilter.Apply("gft1", a => a.rowstate > -1)
.Apply("gft2", a => a.rowstate > -2)
.Apply("gft3", a => a.rowstate > -3);
var gft1 = g.mysql.Select().Where(a => a.id == Guid.NewGuid()).ToList();
var gft2 = g.mysql.Select().Where(a => a.id == Guid.NewGuid()).ToList();
var gft3 = g.mysql.Select().Where(a => a.id == Guid.NewGuid()).ToList();
var repo1 = g.mysql.GetRepository();
using (repo1.DataFilter.Disable("gft1", "gft2", "gft3"))
repo1.Get(Guid.NewGuid());
var repo2 = g.mysql.GetRepository();
using (repo2.DataFilter.Disable("gft1", "gft2", "gft3"))
repo2.Get(Guid.NewGuid());
var repo3 = g.mysql.GetRepository();
using (repo3.DataFilter.Disable("gft1", "gft2", "gft3"))
repo3.Get(Guid.NewGuid());
g.sqlserver.Delete().Where("1=1").ExecuteAffrows();
g.mysql.Delete().Where("1=1").ExecuteAffrows();
g.pgsql.Delete().Where("1=1").ExecuteAffrows();
g.oracle.Delete().Where("1=1").ExecuteAffrows();
g.sqlite.Delete().Where("1=1").ExecuteAffrows();
g.sqlserver.Insert(Enumerable.Range(0, 1048).Select(a => new TBatInst { Name = "test" + a }).ToList()).ExecuteAffrows();
g.mysql.Insert(Enumerable.Range(0, 1048).Select(a => new TBatInst { Name = "test" + a }).ToList()).ExecuteAffrows();
g.pgsql.Insert(Enumerable.Range(0, 1048).Select(a => new TBatInst { Name = "test" + a }).ToList()).ExecuteAffrows();
g.oracle.Insert(Enumerable.Range(0, 1048).Select(a => new TBatInst { Name = "test" + a }).ToList()).ExecuteAffrows();
g.sqlite.Insert(Enumerable.Range(0, 1048).Select(a => new TBatInst { Name = "test" + a }).ToList()).ExecuteAffrows();
Assert.Equal(1048, g.sqlserver.Select().Count());
Assert.Equal(1048, g.mysql.Select().Count());
Assert.Equal(1048, g.pgsql.Select().Count());
Assert.Equal(1048, g.oracle.Select().Count());
Assert.Equal(1048, g.sqlite.Select().Count());
//----
g.sqlserver.Delete().Where("1=1").ExecuteAffrows();
g.mysql.Delete().Where("1=1").ExecuteAffrows();
g.pgsql.Delete().Where("1=1").ExecuteAffrows();
g.oracle.Delete().Where("1=1").ExecuteAffrows();
g.sqlite.Delete().Where("1=1").ExecuteAffrows();
g.sqlserver.Insert(Enumerable.Range(0, 1048).Select(a => new TBatInst { Name = "test" + a }).ToList()).NoneParameter().ExecuteAffrows();
g.mysql.Insert(Enumerable.Range(0, 1048).Select(a => new TBatInst { Name = "test" + a }).ToList()).NoneParameter().ExecuteAffrows();
g.pgsql.Insert(Enumerable.Range(0, 1048).Select(a => new TBatInst { Name = "test" + a }).ToList()).NoneParameter().ExecuteAffrows();
g.oracle.Insert(Enumerable.Range(0, 1048).Select(a => new TBatInst { Name = "test" + a }).ToList()).NoneParameter().ExecuteAffrows();
g.sqlite.Insert(Enumerable.Range(0, 1048).Select(a => new TBatInst { Name = "test" + a }).ToList()).NoneParameter().ExecuteAffrows();
Assert.Equal(1048, g.sqlserver.Select().Count());
Assert.Equal(1048, g.mysql.Select().Count());
Assert.Equal(1048, g.pgsql.Select().Count());
Assert.Equal(1048, g.oracle.Select().Count());
Assert.Equal(1048, g.sqlite.Select().Count());
//----
g.sqlserver.Delete().Where("1=1").ExecuteAffrows();
g.mysql.Delete().Where("1=1").ExecuteAffrows();
g.pgsql.Delete().Where("1=1").ExecuteAffrows();
g.oracle.Delete().Where("1=1").ExecuteAffrows();
g.sqlite.Delete().Where("1=1").ExecuteAffrows();
g.sqlserver.Insert(Enumerable.Range(0, 3348).Select(a => new TBatInst { Name = "test" + a }).ToList()).ExecuteAffrows();
g.mysql.Insert(Enumerable.Range(0, 3348).Select(a => new TBatInst { Name = "test" + a }).ToList()).ExecuteAffrows();
g.pgsql.Insert(Enumerable.Range(0, 3348).Select(a => new TBatInst { Name = "test" + a }).ToList()).ExecuteAffrows();
g.oracle.Insert(Enumerable.Range(0, 3348).Select(a => new TBatInst { Name = "test" + a }).ToList()).ExecuteAffrows();
g.sqlite.Insert(Enumerable.Range(0, 3348).Select(a => new TBatInst { Name = "test" + a }).ToList()).ExecuteAffrows();
Assert.Equal(3348, g.sqlserver.Select().Count());
Assert.Equal(3348, g.mysql.Select().Count());
Assert.Equal(3348, g.pgsql.Select().Count());
Assert.Equal(3348, g.oracle.Select().Count());
Assert.Equal(3348, g.sqlite.Select().Count());
//----
g.sqlserver.Delete().Where("1=1").ExecuteAffrows();
g.mysql.Delete().Where("1=1").ExecuteAffrows();
g.pgsql.Delete().Where("1=1").ExecuteAffrows();
g.oracle.Delete().Where("1=1").ExecuteAffrows();
g.sqlite.Delete().Where("1=1").ExecuteAffrows();
g.sqlserver.Insert(Enumerable.Range(0, 3348).Select(a => new TBatInst { Name = "test" + a }).ToList()).NoneParameter().ExecuteAffrows();
g.mysql.Insert(Enumerable.Range(0, 3348).Select(a => new TBatInst { Name = "test" + a }).ToList()).NoneParameter().ExecuteAffrows();
g.pgsql.Insert(Enumerable.Range(0, 3348).Select(a => new TBatInst { Name = "test" + a }).ToList()).NoneParameter().ExecuteAffrows();
g.oracle.Insert(Enumerable.Range(0, 3348).Select(a => new TBatInst { Name = "test" + a }).ToList()).NoneParameter().ExecuteAffrows();
g.sqlite.Insert(Enumerable.Range(0, 3348).Select(a => new TBatInst { Name = "test" + a }).ToList()).NoneParameter().ExecuteAffrows();
Assert.Equal(3348, g.sqlserver.Select().Count());
Assert.Equal(3348, g.mysql.Select().Count());
Assert.Equal(3348, g.pgsql.Select().Count());
Assert.Equal(3348, g.oracle.Select().Count());
Assert.Equal(3348, g.sqlite.Select().Count());
//var serverTime = g.pgsql.Select().Limit(1).First(a => DateTime.UtcNow);
//var timeOffset = DateTime.UtcNow.Subtract(serverTime); //减去数据库时间
//g.pgsql.Aop.AuditValue += new EventHandler((_, e) =>
//{
// if (e.Column.Attribute.MapType.NullableTypeOrThis() == typeof(DateTime))
// {
// if (e.Value == null || (DateTime)e.Value == default(DateTime))
// {
// e.Value = DateTime.Now.Subtract(timeOffset);
// return;
// }
// }
//});
g.pgsql.Delete().Where("1=1").ExecuteAffrows();
g.pgsql.GetRepository().Insert(new TestIgnoreDefaultValue[]
{
new TestIgnoreDefaultValue(),
new TestIgnoreDefaultValue(),
new TestIgnoreDefaultValue()
});
var testttt = g.pgsql.Select().Limit(10).ToList();
var slsksd = g.mysql.Update().SetSource(new UserLike { Id = Guid.NewGuid(), CreateUserId = 1000, SubjectId = Guid.NewGuid() })
.UpdateColumns(a => new
{
a.SubjectId
}).NoneParameter().ToSql();
g.mysql.Aop.ParseExpression += (s, e) =>
{
if (e.Expression.NodeType == ExpressionType.Call)
{
var callExp = e.Expression as MethodCallExpression;
if (callExp.Object?.Type == typeof(DateTime) &&
callExp.Method.Name == "ToString" &&
callExp.Arguments.Count == 1 &&
callExp.Arguments[0].Type == typeof(string) &&
callExp.Arguments[0].NodeType == ExpressionType.Constant)
{
var format = (callExp.Arguments[0] as ConstantExpression)?.Value?.ToString();
if (string.IsNullOrEmpty(format) == false)
{
var tmp = e.FreeParse(callExp.Object);
switch (format)
{
case "yyyy-MM-dd HH:mm":
tmp = $"date_format({tmp}, '%Y-%m-%d %H:%i')";
break;
}
e.Result = tmp;
}
}
}
};
//var dbs = g.sqlserver.DbFirst.GetDatabases();
var tbs = g.sqlserver.DbFirst.GetTablesByDatabase("ds_shop");
var dicParamslist = g.sqlite.Select().Page(1, 10)
.Where("id > @id and id > @id2 and id > @id3",
new Dictionary { ["id"] = 1, ["id2"] = 2, ["id3"] = 3 })
.ToList();
var list111 = g.sqlite.Select()
.Page(1, 10)
.ToList(a => new { Id = a.Id })
.Select(a => new SysModule { Id = a.Id }).ToList()
.IncludeMany(g.sqlite, a => a.Permissions, then => then.Include(a => a.Button));
var list222 = g.sqlite.Select()
.IncludeMany(m => m.Permissions, then => then.Include(a => a.Button))
.Page(1, 10)
.ToList();
var comments1 = g.mysql.Select()
.LeftJoin((a, b) => a.Id == b.SubjectId)
.ToList((a, b) => new { comment = a, b.SubjectId, user = a.UserInfo });
var comments2 = g.mysql.Select()
.Include(r => r.UserInfo)
.From((z, b) => z.LeftJoin(u => u.Id == b.SubjectId))
.ToList((a, b) => new { comment = a, b.SubjectId, user = a.UserInfo,
testb1 = a.UserInfo == null ? 1 : 0,
testb2 = a.UserInfo != null ? 2 : 0,
testb4 = b == null ? 3 : 0,
testb5 = b != null ? 4 : 0,
});
g.sqlite.Delete().Where("1=1").ExecuteAffrows();
g.sqlite.Delete().Where("1=1").ExecuteAffrows();
g.sqlite.Delete().Where("1=1").ExecuteAffrows();
var menu1 = new SysModule { Id = "menu1", Name = "菜单1" };
var menu2 = new SysModule { Id = "menu2", Name = "菜单2" };
g.sqlite.Insert(new[] { menu1, menu2 }).ExecuteAffrows();
var button1 = new SysModuleButton { Id = "button1", Name = "添加" };
var button2 = new SysModuleButton { Id = "button2", Name = "修改" };
var button3 = new SysModuleButton { Id = "button3", Name = "删除" };
var button4 = new SysModuleButton { Id = "button4", Name = "查询" };
g.sqlite.Insert(new[] { button1, button2, button3, button4 }).ExecuteAffrows();
g.sqlite.Insert(new[] {
new SysModulePermission { Id = "menu1_button1", SysModuleId = menu1.Id, SysModuleButtonId = button1.Id },
new SysModulePermission { Id = "menu1_button2", SysModuleId = menu1.Id, SysModuleButtonId = button2.Id },
new SysModulePermission { Id = "menu1_button3", SysModuleId = menu1.Id, SysModuleButtonId = button3.Id },
new SysModulePermission { Id = "menu1_button4", SysModuleId = menu1.Id, SysModuleButtonId = button4.Id },
new SysModulePermission { Id = "menu2_button1", SysModuleId = menu2.Id, SysModuleButtonId = button1.Id },
new SysModulePermission { Id = "menu2_button2", SysModuleId = menu2.Id, SysModuleButtonId = button2.Id },
new SysModulePermission { Id = "menu2_button3", SysModuleId = menu2.Id, SysModuleButtonId = button3.Id },
new SysModulePermission { Id = "menu2_button4", SysModuleId = menu2.Id, SysModuleButtonId = button4.Id },
}).ExecuteAffrows();
var list123123 = g.sqlite.Select()
.IncludeMany(m => m.Permissions.Where(p => p.SysModuleId == m.Id),
then => then.LeftJoin(p => p.Button.Id == p.SysModuleButtonId))
.ToList();
var sql = g.sqlite.Select()
.ToSql(a => a.CreateTime.FormatDateTime("yyyy-MM-dd"));
var parm1 = "11";
var parm2 = "22";
var parm3 = "33";
var testparmSelect = g.sqlserver.Select()
.Where(a =>
a.nvarchar == "11" &&
a.nvarchar_notnull == "22" &&
a.nvarchar_null == "33" &&
a.varchar == "11" &&
a.varchar_notnull == "22" &&
a.varchar_null == "33" &&
a.nvarchar == parm1 &&
a.nvarchar_notnull == parm2 &&
a.nvarchar_null == parm3 &&
a.varchar == parm3 &&
a.varchar_notnull == parm2 &&
a.varchar_null == parm3 &&
a.nvarchar == parm1.SetDbParameter(10) &&
a.nvarchar_notnull == parm2.SetDbParameter(11) &&
a.nvarchar_null == parm3.SetDbParameter(12) &&
a.varchar == parm3.SetDbParameter(13) &&
a.varchar_notnull == parm2.SetDbParameter(14) &&
a.varchar_null == parm3.SetDbParameter(15) &&
"11" == a.nvarchar &&
"22" == a.nvarchar_notnull &&
"33" == a.nvarchar_null &&
"11" == a.varchar &&
"22" == a.varchar_notnull &&
"33" == a.varchar_null &&
parm1 == a.nvarchar &&
parm2 == a.nvarchar_notnull &&
parm3 == a.nvarchar_null &&
parm1 == a.varchar &&
parm2 == a.varchar_notnull &&
parm3 == a.varchar_null &&
parm1.SetDbParameter(10) == a.nvarchar &&
parm2.SetDbParameter(11) == a.nvarchar_notnull &&
parm3.SetDbParameter(12) == a.nvarchar_null &&
parm1.SetDbParameter(13) == a.varchar &&
parm2.SetDbParameter(14) == a.varchar_notnull &&
parm3.SetDbParameter(15) == a.varchar_null
);
//g.sqlserver.CodeFirst.IsGenerateCommandParameterWithLambda = true;
var name = "testname";
var sdfsdgselect1 = g.sqlserver.Select().Where(a => a.varchar == name);
var sdfsdgselect2 = g.sqlserver.Select().Where(a => a.varchar == name.SetDbParameter(10));
g.sqlserver.Select().Where(a => a.varchar == name).ToList();
g.sqlserver.Select().Where(a => a.varchar == name.SetDbParameter(10)).ToList();
var testarr = new string[] { "1", "2" };
var sdfsdgselect3 = g.sqlserver.Select().Where(a => testarr.Contains(a.varchar));
g.sqlserver.Select().Where(a => testarr.Contains(a.varchar)).ToList();
}
}
[ExpressionCall]
public static class DbFunc
{
static ThreadLocal context = new ThreadLocal();
public static string FormatDateTime(this DateTime that, string arg1)
{
return $"date_format({context.Value.ParsedContent["that"]}, {context.Value.ParsedContent["arg1"]})";
}
///
/// 设置表达式中的 string 参数化长度,优化执行计划
///
///
///
///
public static string SetDbParameter(this string that, int size)
{
if (context.Value.DbParameter != null)
{
//已经参数化了,开启了全局表达式参数化功能:UseGenerateCommandParameterWithLambda(true)
context.Value.DbParameter.Size = size;
return context.Value.ParsedContent["that"];
}
var guid = Guid.NewGuid().ToString("N").ToLower();
context.Value.UserParameters.Add(new SqlParameter
{
ParameterName = guid,
SqlDbType = System.Data.SqlDbType.VarChar,
Size = size,
Value = that
});
return $"@{guid}";
}
}
}