dotnetcore / FreeSql

🦄 .NET aot orm, C# orm, VB.NET orm, Mysql orm, Postgresql orm, SqlServer orm, Oracle orm, Sqlite orm, Firebird orm, 达梦 orm, 人大金仓 orm, 神通 orm, 翰高 orm, 南大通用 orm, 虚谷 orm, 国产 orm, Clickhouse orm, QuestDB orm, MsAccess orm.

Home Page:http://freesql.net

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Where 方法 使用like 的奇怪现象

ckbabby opened this issue · comments

问题描述及重现代码:

using FreeSql;
using FreeSql.DataAnnotations;

using (var fsql = new FreeSqlBuilder()
	.UseConnectionString(DataType.Sqlite, "data source=111.db")
	.UseAutoSyncStructure(true)
	.UseNoneCommandParameter(true)
	.UseMonitorCommand(cmd => Console.WriteLine(cmd.CommandText + "\r\n"))
	.Build())
{
    var table = fsql.CodeFirst.DynamicEntity("user", new TableAttribute { Name = "t_user" })
      .Property("id", typeof(int), new ColumnAttribute { IsIdentity = true, IsPrimary = true })
      .Property("username", typeof(string), new ColumnAttribute { StringLength = 32 })
       .Property("adminIds", typeof(string), new ColumnAttribute { StringLength = -1 })
      .Build();

    //如果有必要,请将 table 缓存起来
    if (fsql.DbFirst.ExistsTable(table.DbName) == false)
        fsql.CodeFirst.SyncStructure(table.Type); //创建表

    var dict = new Dictionary<string, object>();
    dict["username"] = "aaa";
    dict["adminIds"] = ",1,2,3,4,5";
    object obj = table.CreateInstance(dict);
    var insNum = fsql.Insert<object>().AsType(table.Type).AppendData(obj).ExecuteAffrows();
    ///这里输出的sql语句替换参数化的地方是能查询出来的,但是代码返回结果为空数组
    var list = fsql.Select<object>().AsType(table.Type).Where("adminIds like '%,@a,%'", new { a = 1 }).ToList();
    Console.ReadLine();
}

数据库版本

Sqlite

安装的Nuget包

FreeSql.All 3.2.821

.net framework/. net core? 及具体版本

adminIds like @p1

要这样写,你写的被当成了字符串