肯定是有问题的,我自己下载sqlsugar源码跟踪调试找到了问题,在sqlsugar项目中PostgreSQLQueryBuilder.cs文件里
对于复杂模型,也就是多表联合查询,带有AS .的sql语句判断的正则表达式原始如下
public override bool IsComplexModel(string sql)
{
return Regex.IsMatch(sql, @"AS \w+\.\w+");
}
多表联合的语句如下:
SELECT "r"."isdeleted" AS "role.isdeleted" , "r"."name" AS "role.name" , "r"."description" AS "role.description" , "r"."ordersort" AS "role.ordersort" , "r"."enabled" AS "role.enabled" , "r"."createid" AS "role.createid" , "r"."createby" AS "role.createby" , "r"."createtime" AS "role.createtime" , "r"."modifyid" AS "role.modifyid" , "r"."modifyby" AS "role.modifyby" , "r"."modifytime" AS "role.modifytime" , "r"."id" AS "role.id" , "m"."isdeleted" AS "modules.isdeleted" , "m"."parentid" AS "modules.parentid" , "m"."name" AS "modules.name" , "m"."linkurl" AS "modules.linkurl" , "m"."area" AS "modules.area" , "m"."controller" AS "modules.controller" , "m"."action" AS "modules.action" , "m"."icon" AS "modules.icon" , "m"."code" AS "modules.code" , "m"."ordersort" AS "modules.ordersort" , "m"."description" AS "modules.description" , "m"."ismenu" AS "modules.ismenu" , "m"."enabled" AS "modules.enabled" , "m"."createid" AS "modules.createid" , "m"."createby" AS "modules.createby" , "m"."createtime" AS "modules.createtime" , "m"."modifyid" AS "modules.modifyid" , "m"."modifyby" AS "modules.modifyby" , "m"."modifytime" AS "modules.modifytime" , "m"."id" AS "modules.id" , "rmp"."isdeleted" AS "isdeleted" FROM "rolemodulepermission" rmp Left JOIN "modules" m ON ( "rmp"."moduleid" = "m"."id" ) Left JOIN "role" r ON ( "rmp"."roleid" = "r"."id" ) WHERE ((( "rmp"."isdeleted" = @IsDeleted0 ) AND ( "m"."isdeleted" = @IsDeleted1 )) AND ( "r"."isdeleted" = @IsDeleted2 ))
AS "role.i 作者意思应该是匹配AS 加上. ,漏掉了双引号,匹配不上,然后后面就按通常模型去构建数据了,造成上面我说的那个问题,我把正则表达式改成下面这样
public override bool IsComplexModel(string sql)
{
return Regex.IsMatch(sql, @"AS\s""\w+\.\w+");
}
程序就通了,可以登录上了