Closed zhujiancc closed 1 month ago
var searchCmd="select user_id,platform_id,user_name,head_url from User"
var searchCmd="select user_id,platform_id,user_name,head_url from User"
我的案例可能简化了, 没有描述清楚 ,
场景是 , sql是多表联查的, 返回值结果是动态的,
这边定义了一个完整的model 来接收 (model并不是真实的数据库类模型),
就会出现上面的错误
在PostgreSql中,默认有一张user表用来存放PostgreSql的用户,当我们自己建立一个user表的时候,优先访问系统默认的user表
//防止和系统冲突
[Table(Name = "t_user")]
public class User
{
[Column(Name = "user_id")] public string UserId { get; set; }
[Column(Name = "platform_id")] public string PlatformId { get; set; }
[Column(Name = "user_name")] public string UserName { get; set; }
[Column(Name = "head_url")] public string HeadUrl { get; set; }
[Column(Name = "is_original")] public int IsOriginal{ get; set; }
}
提供一个Demo我们复现一下看看
以下 是demo :【PostgreSQLCodeFirstTest】
[Fact]
public void ColumnNotExistTest()
{
g.pgsql.Insert(new Blogger()
{
Name = "hello",
FansCount = 1,
HeadUrl = "xxx.jpg"
}).ExecuteAffrows();
var cmd = "select id,name,fans_count from Blogger";
var result= g.pgsql.Select<Blogger>().WithSql(cmd).ToList();
}
public class Blogger
{
[Column(Name = "id",IsIdentity = true)] public int Id { get; set; }
[Column(Name = "name")]public string Name { get; set; }
[Column(Name = "fans_count")] public int FansCount { get; set; }
[Column(Name = "head_url")] public string HeadUrl { get; set; }
}
源码调试了下 ,生成的sql 有点问题 ,
a."id", a."name", a."fans_count", a."head_url" 生成是从实体中来的, 子查询并没有返回head_url
SELECT a."id", a."name", a."fans_count", a."head_url"
FROM ( select id,name,fans_count from Blogger ) a
这里要不直接
SELECT a.*
FROM ( select id,name,fans_count from Blogger ) a
var result= g.pgsql.Select\<Blogger>().WithSql(cmd).ToList("*")
针对特别的查询,特别处理一下
一般除了需要二次加工,比如嵌套SQL进行分页,才会用到withsql
否则不如直接使用ado.Query
sql 没有返回is_original , 但实体定义了 [Column(Name = "is_original")] public int IsOriginal{ get; set; }
报错如下:
数据库版本
Postgresql
安装的Nuget包
FreeSql.Provider.Postgresql 3.2.813
.net framework/. net core? 及具体版本
net core