65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 CatFactory.UI 文档 SQL Server 数据库

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.31/5 (6投票s)

2018 年 7 月 16 日

CPOL

5分钟阅读

viewsIcon

8130

使用 CatFactory.UI 文档 SQL Server 数据库

引言

在企业中,拥有文档是一个好习惯,通常我们会为源代码编写文档,至少我们会在源代码中添加注释来解释实现细节,但数据库的情况并非如此。

一些公司会在企业门户中有一个目录,其中包含(Word)文档,里面是所有数据库的文档。

在本指南中,我们将使用 CatFactory.SqlServer 包来添加或更新表、表列、视图和视图列的描述。

还有其他选项可以记录 SQL Server 数据库,例如:Dataedo,但这个项目是展示 CatFactory 可能性的一个好机会。

背景

CatFactory 提供数据库的架构:表、视图和其他对象; CatFactory.SqlServer 包开发团队增加了从数据库导入扩展属性的改进,通常开发人员使用 MS_Description 扩展属性来存储描述。

因此,CatFactory 会检索 MS_Description 扩展属性的所有值,并将这些值添加到 CatFactory 定义的 Description 属性中。

有一个关于使用 CatFactory 生成数据字典的技巧,很快就会有一个更新的技巧,以便使用最新版本的 CatFactory.SqlServer 包。

数据库

请查看示例数据库以了解架构中的每个组件。在此数据库中有 4 个架构:DboHumanResourcesWarehouseSales

每个架构代表商店公司的一个部门,请记住这一点,因为所有代码的设计都遵循这个方面;目前此代码仅实现 ProductionSales 架构的功能。

所有表都有一个包含一列的主键,并包含用于创建、上次更新和并发令牌的列。

您可以在此链接找到数据库脚本:GitHub 上的在线商店数据库脚本

请记住:这只是一个示例数据库,仅用于概念演示。

架构 名称
dbo 变更日志
dbo 变更日志排除
dbo 国家
dbo 国家货币
dbo 货币
dbo EventLog(事件日志)
人力资源 员工
人力资源 员工地址
人力资源 员工邮箱
销售 客户
销售 订单明细
销售 订单头
销售 订单状态
销售 支付方式
销售 发货人
仓库 Location
仓库 产品
仓库 产品类别
仓库 产品库存

使用代码

CatFactory 的第一个概念是导入现有数据库。

为了添加文档,我们需要安装 CatFactory.SqlServer

名称 版本  
CatFactory.SqlServer 1.0.0-beta-sun-build16 允许从 SQL Server 实例导入现有数据库

要开始记录,请从 SQL Server 实例导入数据库

// Create instance for database factory
var databaseFactory = new SqlServerDatabaseFactory
{
	DatabaseImportSettings = new DatabaseImportSettings
	{
		ConnectionString = "server=(local);database=Store;integrated security=yes;",
		ExtendedProperties =
		{
			"MS_Description"
		}
	}
};

// Import database
var database = databaseFactory.Import();

Import 方法会提取表、视图以及表和视图中列的扩展属性,调用 fn_listextendedproperty 表函数以检索扩展属性。

这是 ExtendedProperty 类的定义

using System.Diagnostics;

namespace CatFactory.Mapping
{
    [DebuggerDisplay("Name={Name}, Value={Value}")]
    public class ExtendedProperty
    {
        public ExtendedProperty();

        public string Name { get; set; }
        
        public string Value { get; set; }
        
        public string Level0Type { get; set; }
        
        public string Level0Name { get; set; }
        
        public string Level1Type { get; set; }
        
        public string Level1Name { get; set; }
        
        public string Level2Type { get; set; }
        
        public string Level2Name { get; set; }
    }
}

读取扩展属性

// Get table from database
var table = database.FindTable("Production.Product");

// Get extended properties for table
foreach (var extendedProperty in table.ExtendedProperties)
{
	Console.WriteLine("Name: '{0}', Value: '{1}'", extendedProperty.Name, extendedProperty.Value);
}

SqlServerDatabaseFactory 的扩展方法

名称 描述
AddExtendedProperty 为数据库对象添加扩展属性
UpdateExtendedProperty 更新数据库对象的扩展属性
AddOrUpdateExtendedProperty 添加或更新数据库对象的扩展属性
DropExtendedProperty 删除数据库对象的扩展属性

这些方法允许管理表、视图以及表和视图中列的扩展属性。

处理表

为表添加扩展属性

// Get table from database
var table = database.FindTable("Production.Product");

// Add extended property
databaseFactory.AddExtendedProperty(table, "MS_Description", "Products catalog");

为表中的列添加扩展属性

// Get table from database
var table = database.FindTable("Production.Product");

// Get column from table
var column = table.GetColumn("ProductName");

// Add extended property
databaseFactory.AddExtendedProperty(table, column, "MS_Description", "Name for product");

AddExtendedProperty 方法调用 sp_addextendedproperty 存储过程。

更新表的扩展属性

// Get table from database
var table = database.FindTable("Production.Product");

// Update extended property
databaseFactory.UpdateExtendedProperty(table, "MS_Description", "Products catalog for store");

更新表中列的扩展属性

// Get table from database
var table = database.FindTable("Production.Product");

// Get column from table
var column = table.GetColumn("UnitPrice");

// Update extended property
databaseFactory.UpdateExtendedProperty(table, column, "MS_Description", "Unit price for product in USD");

UpdateExtendedProperty 方法调用 sp_updateextendedproperty 存储过程。

为表添加或更新扩展属性

// Get table from database
var table = database.FindTable("Production.Product");

// Update extended property
databaseFactory.AddOrUpdateExtendedProperty(table, "MS_Description", "Products catalog for store");

为表中的列添加或更新扩展属性

// Get table from database
var table = database.FindTable("Production.Product");

// Get column from table
var column = table.GetColumn("Description");

// Update extended property
databaseFactory.AddOrUpdateExtendedProperty(table, "MS_Description", "Description for product");

AddOrUpdateExtendedProperty 方法调用 sp_addextendedpropertysp_updateextendedproperty 存储过程。

删除表的扩展属性

// Get table from database
var table = database.FindTable("Production.Product");

// Update extended property
databaseFactory.DropExtendedProperty(table, "MS_Description");

删除表中列的扩展属性

// Get table from database
var table = database.FindTable("Production.Product");

// Get column from table
var column = table.GetColumn("UnitPrice");

// Update extended property
databaseFactory.DropExtendedProperty(table, column, "MS_Description");

DropExtendedProperty 方法调用 sp_dropextendedproperty 存储过程。

处理视图

为视图添加扩展属性

// Get view from database
var view = database.FindView("Sales.OrderSummary");

// Add extended property
databaseFactory.AddExtendedProperty(view, "MS_Description", "Summary for orders");

为视图中的列添加扩展属性

// Get view from database
var view = database.FindView("Sales.OrderSummary");

// Get column from view
var column = view.GetColumn("ShipperName");

// Add extended property
databaseFactory.AddExtendedProperty(view, column, "MS_Description", "Name for shipper");

AddExtendedProperty 方法调用 sp_addextendedproperty 存储过程。

更新视图的扩展属性

// Get view from database
var view = database.FindView("Sales.OrderSummary");

// Update extended property
databaseFactory.UpdateExtendedProperty(view, "MS_Description", "Details information for orders");

更新视图中列的扩展属性

// Get view from database
var view = database.FindView("Sales.OrderSummary");

// Get column from view
var column = view.GetColumn("Total");

// Update extended property
databaseFactory.UpdateExtendedProperty(view, column, "MS_Description", "Total for order in USD");

UpdateExtendedProperty 方法调用 sp_updateextendedproperty 存储过程。

为视图添加或更新扩展属性

// Get view from database
var view = database.FindView("Sales.OrderSummary");

// Update extended property
databaseFactory.AddOrUpdateExtendedProperty(view, "MS_Description", "Details information for orders in store");

为视图中的列添加或更新扩展属性

// Get view from database
var view = database.FindView("Sales.OrderSummary");

// Get column from view
var column = view.GetColumn("Total");

// Update extended property
databaseFactory.AddOrUpdateExtendedProperty(view, "MS_Description", "Total for order in USD");

AddOrUpdateExtendedProperty 方法调用 sp_addextendedpropertysp_updateextendedproperty 存储过程。

删除视图的扩展属性

// Get view from database
var view = database.FindView("Sales.OrderSummary");

// Update extended property
databaseFactory.DropExtendedProperty(view, "MS_Description");

删除视图中列的扩展属性

// Get view from database
var view = database.FindView("Sales.OrderSummary");

// Get column from view
var column = view.GetColumn("CurrencyName");

// Update extended property
databaseFactory.DropExtendedProperty(view, column, "MS_Description");

DropExtendedProperty 方法调用 sp_dropextendedproperty 存储过程。

上面的代码使用 MS_Description,但在代码中我们可以使用其他扩展属性。

使用 UI

CatFactory 的 UI 允许使用图形界面编辑扩展属性。

此客户端调用 CatFactory.SqlServer 包中的相同方法。

设置

后端

先决条件:.NET Core 2

使用 Visual Studio

  1. 打开位于 Back-end 目录中的 CatFactory.UI.API 解决方案
  2. CatFactory.UI.API 设置为启动项目
  3. 重新生成解决方案
  4. 在 launchSettings.json 文件中(对于 iisSettings 和 CatFactory.UI.API 配置文件)将端口号设置为 8400
  5. 运行 CatFactory.UI.API 项目

确保 API 在端口 8400 上运行

使用命令行

  1. 打开位于 Back-end 目录中的 CatFactory.UI.API 目录的命令行终端
  2. 运行 "dotnet restore" 命令以恢复所有 nuget 包
  3. 运行 "dotnet run" 命令以运行 CatFactory.UI.API 项目

Back-end 引用了 CatFactory.SqlServer 包。

前端

先决条件:NodeJS,Angular CLI

  1. 打开位于 Front-end 目录中的 CatFactoryUI 目录的命令行
  2. 运行 "npm install" 命令以安装所有 nodejs 包
  3. 运行 "ng serve" 以在端口 4200 上启动项目

记录现有数据库

此客户端包含以下视图

  • Dashboard:显示已导入的数据库。
  • Import:允许从 SQL Server 实例导入现有数据库。
  • Database details:显示已导入数据库的详细信息。
  • Table details:显示所选表的详细信息。
  • View details:显示所选视图的详细信息。
  • Edit description:允许编辑数据库对象的描述。

此客户端仅处理 MS_Description,但我们可以在 C# 代码中更改扩展属性。

转到仪表板,最初没有任何数据库

Dashboard

转到导入,此视图允许导入现有数据库

Import

设置名称和连接字符串以导入现有数据库,此外我们还可以禁用要导入的表和视图。

Add Information to Import

现在我们可以在仪表板视图中看到数据库了

Dashboard with databases

一旦我们从列表中选择一个数据库,我们就可以看到数据库的详细信息,例如表、视图和数据库类型映射

Database details

我们可以选择一个表来查看详细信息

Table details

在详细信息视图中,我们可以编辑表的描述

Edit Table Description Save Table Description

我们还可以编辑列的描述

Description for Columns Edit Column Description Save Column Description

对于视图和视图的列,过程也一样。

代码改进

  • 允许为数据库添加描述
  • 允许为索引添加描述
  • 允许为表函数添加描述
  • 允许为存储过程添加描述
  • 添加导出功能(Word、PDF、HTML)

关注点

  • Description 字段在 UI 中不是必需的,因为在某些情况下我们想清除对象的描述

历史

  • 2018年7月15日:初始版本
  • 2018年10月4日:添加了表和视图的代码部分和操作说明
© . All rights reserved.