前言
PostgreSQL 是世界公认的功能最强大的开源数据库,除了基础数据类型 int4/int8/varchar/numeric/timestamp 等,还支持 int4[]/int8[]/varchar[]/numeric[]/timestamp[] 数组类型、hstore 类型(类似 c# Dictionary<string, string>)、gis 类型。
选择一项技术一定是可以帮助我们提升效率,并且使用一定是非常简便的,才能让我们赚取更多时间,早点下班甚至上班摸鱼。这篇文章主要讲数组类型,如何与 FreeSql 打出简便高效的【组合拳】。
PostgreSQL 可以为每一种类型创建数组,比如 int4 对应的数组类型是 int4[]、varchar 对应的数据类型是 varchar[]。
PostgreSQL 虽然支持多维数组,但是不建议使用,因为实际使用中会带来很多操作麻烦,违背了使用简便的初衷。一维数组足够应付很多场景。
FreeSql 本身已经支持五种导航属性,OneToOne/ManyToOne/OneToMany/ManyToMany/Parent,为它们量身打造了级联保存、贪婪加载、延迟加载、级联删除(递归)、CTE递归查询等功能。
今天 FreeSql 为 PostgreSQL Array 数组类型提供了第六种新的导航属性 PgArrayToMany 专属功能。
数组映射
FreeSql 支持 int[] 映射 int4[]
string[] 映射 varchar[]
DateTime[] 映射 timestamp[]
class Model
{
public Guid Id { get; set; }
public int[] TypeIds { get; set; }
public Guid[] UserIds { get; set; }
}
等等,常用的类型都可以直接用数组进行映射,之后就可以像普通类型一样进行 CRUD 操作了。
var model = new Model
{
Id = Guid.NewGuid(),
TypeIds = new int[] { 1,2,3 },
UserIds = new Guid[] { Guid.NewGuid(), Guid.NewGuid() }
};
fsql.Insert(model).ExecuteAffrows(); //插入
fsql.Update<Model>