项目概述
SnapDevelop 提供可视化设计器,供您快速创建 EF Core 实体、枚举、和 Web 视图。
支持可视化设计器的项目类型包括 C# Web API、C# Library,以及 Vue Web 应用程序,这些项目也因此被称为“设计器项目“。 使用这些设计器项目,您可以自动生成包含控制器、服务和 C# 模型的标准 .NET 项目以及 Vue.js Web 应用程序。 可以在任何 .NET 开发环境(例如 Visual Studio)中打开和维护自动生成的 .NET 项目。
接下来本小节将主要描述 Web API 设计器项目(如想了解 Vue Web 应用程序项目的更多信息,请参考 创建 Vue Web 应用设计器项目)。
Web API 设计器项目主要有两种开发模式:
- Code First(首先创建实体/模型,然后从实体生成数据库)
- Database First(首先创建数据库,然后从该数据库生成实体)
项目类型和工作项
当您想要在 SnapDevelop 中创建 Web API 设计器项目时,您可以选择菜单 文件 > 新建 > 新建项目,在 新建项目 窗口的 设计器开发 选项卡中选择以下项目类型:
Web API:创建一个可以生成后端 Web API 的设计项目。
类库:创建一个空库。
右键单击项目节点,然后选择菜单 添加 > 新建项。 在 设计器开发 选项卡中,您可以选择在可视化设计器中创建以下工作项:
- 实体设计(从零开始):创建一个空的实体元数据文件。
- 实体设计(基于数据库):通过从现有数据库导入数据库架构来创建实体元数据文件。
- 基类实体设计:创建一个可以被其他实体继承的基础实体。
- 从属实体设计:创建一个空的从属实体元数据文件。
- 枚举设计:创建枚举器元数据文件。
(视图设计:您只能在 Vue Web 应用程序设计器项目中添加视图设计文件。Web API 设计器项目不支持视图设计。关于Vue Web 应用程序设计器项目的更多信息,请参考 创建 Vue Web 应用设计器项目。)
Web API 项目
本节内容
本文简要介绍如何在 SnapDevelop 中创建和使用 Web API 项目。
概述
在 SnapDevelop 中,Web API 项目是一个设计器项目,可以生成 ASP.NET Core Web API 项目和代码; 您可以通过 新建项目 -> 设计器开发 -> Web API 创建 Web API 项目。
Web API 项目不仅可以创建 EF Core 实体和枚举器的设计文件,还可以配置 C# 代码生成和数据库连接。
在 Web API 项目中,您可以引用其他项目(例如 类库 项目),方法是右键单击设计器项目下的 依赖关系,选择 添加项目引用,然后选择所需引用的项目,如下:
数据库连接
您可以在 Web API 项目中添加数据库连接。
请右键单击项目下的 连接,然后选择 新增连接...。
在弹出的 新建连接 窗口中,指定数据库连接设置。
指定所需设置后,单击 确定 保存。
您可以稍后在生成项目的 Profile 配置文件中选择此数据库连接。
配置文件
您可以在 Web API 项目中添加生成 Profile 配置文件。
请右键单击项目下的 生成配置,然后选择 新建配置。
在显示的配置文件窗口中,指定新配置。
在底部 连接配置 下可以选择创建的数据库连接。
可以创建多个配置文件, 每个包含不同的配置,用于生成不同的代码。
类库项目
本节内容
本文简要介绍了 SnapDevelop 中类库项目的创建和使用。
概述
类库项目可以通过 新建项目 -> 设计器开发 -> 类库 来创建。
与 Web API 项目一样,类库项目可以创建 EF Core 实体和枚举器的设计文件,但它没有生成配置文件,因此无法生成代码,但它可以被 Web API 项目引用。
要引用类库项目,可以右键单击设计器项目下的 依赖关系,选择 添加项目引用,然后选择要引用的类库项目。
类库继承
引用类库项目后,类库项目中的实体和枚举就可以在当前项目中使用。 例如,可以在当前项目的实体中引用类库项目中的实体和枚举。
类库项目中的枚举也可以直接在过滤器设计器和表达式设计器中使用。 如下所示,在表达式设计器中使用类库项目中的枚举。
同样,添加到类库项目中的授权策略也会应用到当前项目中。 例如,向类库项目添加自定义授权策略Policy。
该授权策略也可以在当前项目中使用,但不能修改或删除。 只能在类库工程中修改和删除。
另外,引用类库项目后,也可以将其自定义代码同步到当前项目中。您需要在当前项目的 自定义代码 页面中选择 使用所引用的项目中的自定义代码设置,如下:
类库项目中添加的自定义代码会同步到当前项目中。从类库项目中同步的自定义代码无法修改或删除。
基类实体
本节内容
概述
当多个实体具有相同字段时,为了避免相同字段的重复设计,SnapDevelop 提供了 基类实体。 基类实体相当于标准实体的简化版,仅包含了字段设计和代码预览。 它可以用来存储多个实体间的共同字段。 它不能生成接口等,只能被其他实体继承使用,而且基类实体只能继承基类实体。
示例
现在,我们将通过一个示例来说明如何创建和使用基类实体。
当多个实体都有主键、创建者、创建时间、更新者、更新时间等字段时,我们可以创建一个基类实体文件,并在字段设计中添加以下字段:
如果实体需要这些字段,只需在实体中选择该基类实体文件,该实体就会继承主键、创建者、创建时间、更新者和更新时间字段,但继承的字段是只读的,如下:
对于从基类实体继承的实体,除了继承的字段是只读的之外,继承的字段的行为与直接添加的字段的行为一致。 项目生成并运行后,这些字段也会包含在数据库表中,如下:
从属实体
本节内容
概述
在 EF Core 中,从属实体只能出现在其他实体类型的导航属性上,包含从属实体的实体是其所有者。
SnapDevelop 提供从属实体供用户存储从属实体的字段。 从属实体只有字段设计和代码预览,不能设置主键,也不能继承或被其他实体继承,但可以被其他实体引用。
一对一
当从属类型与所有者具有一对一的关系时,例如,一个用户有一个工作地址,我们可以使用从属实体来实现这一点。
首先,创建一个从属实体 (Address.sde) 并向该实体添加街道、城市和州字段。
接下来,您在用户实体 (User.sde) 中添加一个字段 (WorkingAddress) 并引用从属实体 (Address.sde)。
生成并运行项目。 数据库中会生成一张 User 表,其中包含从属实体的三个字段,如下:
如果添加两个工作地址,数据将通过三个字段存储在 User 表中:WorkingAddress_Street、WorkingAddress_City 和 WorkingAddress_State,如下:
一对多
当所有者和从属实体是一对多关系时,例如一个用户有多个投递地址,也可以使用从属实体实现一对多关系,SnapDevelop 会将用户的多个投递地址进行转换并将地址以 JSON 格式存储在字段中。
首先,您需要使用一个从属实体,此处使用相同的从属实体 (Address.sde)。
接下来,您在 User.sde 中添加一个字段 (ShippingAddress) 并引用 Address.sde,然后选择 集合。 User.sde 设计如下:
生成并运行项目后,数据库中会生成一张 User 表,其中包含了 ShippingAddress 字段,如下:
如果添加两条数据,则数据将以 JSON 格式存储在 ShippingAddress 字段中,多个地址将存储在一个字符串(集合)中,如下所示: