OrmLite Contains() 没有按预期工作
OrmLite Contains() not working as expected
如果我尝试让所有用户都具有这样的特定角色:
_db.Select<UserAuthCustom>(x => x.Roles.Contains("Bloggers"));
然后它按预期工作并返回用户。
如果我尝试像这样使用查询构建器:
var q = _db.From<UserAuthCustom>()
.Where(x => x.Roles.Contains("Bloggers"))
.Limit(1);
然后它抛出一个异常,因为它认为 "bloggers" 是一个列,并将其转换为类似 WHERE bloggers IN (null)
.
的内容
是否可以在斑点字段上执行类似 LIKE '%\"Blogger\"%'
的操作?
您不能对像 Roles
集合这样的斑点列使用类型化查询,这些列在 table 中使用 configured complex type serializer which defaults to JSV format 对除 Postgre[=31= 之外的所有 RDBMS 进行斑点化] 使用 JSON.
如果您想对 Roles 集合执行 server-side 查询,我建议 persisting them in distinct tables:
container.Register<IAuthRepository>(c =>
new OrmLiteAuthRepository<UserAuthCustom, UserAuthDetails>(c.Resolve<IDbConnectionFactory>()) {
UseDistinctRoleTables = true
});
这样您就可以使用标准加入查询 select 特定角色的所有用户:
var q = db.From<UserAuthCustom>()
.Join<UserAuthRole>((u,r) => r.UserAuthId = u.Id)
.Where<UserAuthRole>(x => x.Role == "Bloggers");
或者,您需要创建一个自定义 SQL 查询,以将斑点角色列作为字符串进行查询,例如:
q.Where("Roles LIKE @role", new { role = "%Blogger%" });
或在自定义 SQL 表达式中使用 typed column names:
q.Where(q.Column<UserAuthCustom>(x => x.Roles) + " LIKE @role,
new { role = "%Blogger%" });
如果我尝试让所有用户都具有这样的特定角色:
_db.Select<UserAuthCustom>(x => x.Roles.Contains("Bloggers"));
然后它按预期工作并返回用户。
如果我尝试像这样使用查询构建器:
var q = _db.From<UserAuthCustom>()
.Where(x => x.Roles.Contains("Bloggers"))
.Limit(1);
然后它抛出一个异常,因为它认为 "bloggers" 是一个列,并将其转换为类似 WHERE bloggers IN (null)
.
是否可以在斑点字段上执行类似 LIKE '%\"Blogger\"%'
的操作?
您不能对像 Roles
集合这样的斑点列使用类型化查询,这些列在 table 中使用 configured complex type serializer which defaults to JSV format 对除 Postgre[=31= 之外的所有 RDBMS 进行斑点化] 使用 JSON.
如果您想对 Roles 集合执行 server-side 查询,我建议 persisting them in distinct tables:
container.Register<IAuthRepository>(c =>
new OrmLiteAuthRepository<UserAuthCustom, UserAuthDetails>(c.Resolve<IDbConnectionFactory>()) {
UseDistinctRoleTables = true
});
这样您就可以使用标准加入查询 select 特定角色的所有用户:
var q = db.From<UserAuthCustom>()
.Join<UserAuthRole>((u,r) => r.UserAuthId = u.Id)
.Where<UserAuthRole>(x => x.Role == "Bloggers");
或者,您需要创建一个自定义 SQL 查询,以将斑点角色列作为字符串进行查询,例如:
q.Where("Roles LIKE @role", new { role = "%Blogger%" });
或在自定义 SQL 表达式中使用 typed column names:
q.Where(q.Column<UserAuthCustom>(x => x.Roles) + " LIKE @role,
new { role = "%Blogger%" });