快速入门
ent 是一个基于 SQL/Gremlin 构建的易于使用但功能强大的 Go Entity 框架,其遵循以下原则:
轻松将你的数据建模为图结构。
使用代码定义模式。
基于代码生成静态类型。
精简的图遍历。

安装
完成 entc (为 ent 生成代码) 的安装后, 你应该将其放入 PATH 中。
创建第一个模式 (Schema)
进行你的项目根目录,并运行命令:
上面的命令将在 <project>/ent/schema/ 目录下为 User 生成模式.
为 User 模式添加两个字段:
在项目根目录运行命令 entc generate:
会生成以下文件:
创建第一个实体(Entity)
首先, 创建一个新的 ent.Client. 在这个例子中,我们将使用 SQLite3.
现在,我们可以创建我们的用户了. 调用函数 CreateUser :
查询实体
entc 会为每个实体的模式生成到一个包内,并包含条件,默认值,验证器和存储相关的附加信息(列名,主键等)。
添加第一个边 (关系)
在教程的这部分,我们要声明 边 (关系) 到模式的另一个实体。 让我们创建另外两个名为 Car 和 Group 且有一些字段的实体。 我们使用 entc 去生成初始模式。
然后我们手动添加剩下的字段:
定义我们的第一个关系,定义一个从 User 到 Car 的边: 一个用户可以 有一辆或多辆 汽车,但是一辆汽车 只有一个 车主 (一对多关系)。

让我们添加 "cars" 的边到 User 的模式中, 然后运行 entc generate ./ent/schema:
下一个实例: 给一个用户添加两辆车。
怎么查询 cars 的边(关系)呢? 我们是这么做的:
添加第一个逆边(反向引用)
假设我们有一个 Car 对象,并且我们想知道它的车主;即 Car 属于哪个 User. 对于这种情况,我们有另一种叫做 “逆边” 的边类型,他的定义函数是 edge.From.

上图中半透明部分就是新的边,要强调的是,我们不会在数据库中创建这条边 它只是对上面的边的反向引用。
让我们为 Car 模式添加一个叫 owner 的逆边,将其引用至 User 模式中的 cars 边 然后运行 entc generate ./ent/schema.
接着上面的 user/cars 例子,我们来查询逆边。
创建第二个边
继续看例子,我们将在 users 和 groups 之间创建一个 M2M (多对多)的关系。

如图所示,每个群组实体可以 拥有多个 用户,一个用户也可以 被连接到多个 群组,一个简单的 “多对多” 关系。 在上图中,Group 模式是 users 边(关系)的拥有者, User 实体有一个名为 groups 的反向引用/逆边。 开始定义这个多对多关系:
<project>/ent/schema/group.go:<project>/ent/schema/user.go:
运行 entc 重新生成代码。
运行第一个图遍历
为了运行第一个图遍历,我们需要生成一些数据(节点和边,或者说实体和关系)。 让我们使用 ent 创建下面的图:

现在我们得到了一个有数据的图,我们可以运行一些查询:
获取 "GitHub" 群组所有用户的全部汽车:
修改上面的查询, 将遍历的起源修改为用户 Ariel (Ariel 所属群组的用户的汽车):
获取有用户(非空)的群组 (使用自动生成的条件查询):
完整的例子请参考: GitHub.
Last updated
Was this helpful?
