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.
http://freesql.net
MIT License
3.99k stars 842 forks source link

Where 方法 使用like 的奇怪现象 #1790

Open ckbabby opened 1 month ago

ckbabby commented 1 month ago

问题描述及重现代码:


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? 及具体版本

2881099 commented 1 month ago

adminIds like @p1

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