KingbaseES客户端编程开发框架-Efcore.pdf
KingbaseES 客户端编程开发框架-Efcore 金仓数据库管理系统 KingbaseES 文档版本:V9(V009R001C001B0024) 发布日期:2023 年 10 月 12 日 北京人大金仓信息技术股份有限公司 目 目 录 录 第 1 章 前言 1 1.1 适用读者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 相关文档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.3 术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.4 手册约定 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 第 2 章 概述 3 2.1 KingbaseES 的 EFCore 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 2.2 KingbaseES 的 EFCore 方言包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 第 3 章 Kdbndp.EntityFrameworkCore.KingbaseES 在.net core 中使用 (windows) 5 3.1 数据库连接字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.2 参考用例 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 第 4 章 Kdbndp.EntityFrameworkCore.KingbaseES 在.net core 中使用 (linux) 4.1 系统必备 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.1.1 环境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.1.2 安装 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.2 参考用例一 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 4.3 参考用例二 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 第 5 章 Kdbndp.EntityFrameworkCore.KingbaseES 在.net Framework 中使用 16 5.1 数据库连接字符串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 5.2 参考用例 16 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 版权声明 24 服务周期承诺 25 I 第 1 章 前言 1 第 章 前言 本文档描述了 Entity Framework Core 的相关背景和 KingbaseES 方言包,并指导如何使用 KingbaseES 方言包 进行编程开发。 前言部分包含以下主题: • 适用读者 • 相关文档 • 术语 • 手册约定 1.1 适用读者 《KingbaseES Core 指南》面向所有使用 KingbaseES 数据库的用户,主要是使用 Entity Framework Core 进行 应用程序开发的开发人员。 1.2 相关文档 有关 Entity Framework Core 的更多信息,请参阅以下资源: Entity Framework Core 1.3 术语 无 1 第 1 章 前言 1.4 手册约定 本文档中可能出现“注意、提示、警告、另请参阅”等标志,它们所代表的含义如下: 注意: 用于突出重要/关键信息、最佳实践等。 提示: 用于突出小窍门、捷径等。 警告: 用于传递设备或环境安全警示信息,若不避免,可能会导致设备损坏、数据丢失、设备性能降低或其 它不可预知的结果。 另请参阅: 用于突出参考、参阅等。 以下程序代码书写约定适用于本文档: 符号 说明 [] 表示包含一个或多个可选项。不需要输入中括号本身。 {} 表示包含两个以上(含两个)的候选,必须在其中选取一个。不需要输入花括号本身。 | 分割中括号或者花括号中的两个或两个以上选项。不需要输入“|”本身。 ... 表示其之前的元素可以被重复。 斜体 表示占位符或者需要提供特定值的变量。 大写 表示系统提供的元素,以便与用户定义的元素相互区分。除出现在方括号中的元素外,应当按 照顺序逐字输入。当然,部分元素在系统中是大小写不敏感的,因此用户可以根据系统说明以 小写形式输入。 小写 表示由用户提供的元素。 2 第 2 章 概述 2 第 章 概述 本部分描述了 Entity Framework 6 的开发背景,以及目前 KingbaseES 对 EFCore 的兼容情况。 本部分包含以下章节: • KingbaseES 的 EFCore 简介 • KingbaseES 的 EFCore 方言包 2.1 KingbaseES 的 EFCore 简介 微软为了支持.NET 开发人员使用.NET 对象处理数据库的对象关系映射程序 (O/RM),开发出了一种 (O/RM) 框架 Entity Framework。该框架不要求开发人员编写大部分数据访问代码。Entity Framework 目前支持两个版本: Entity Framework 6 和 Entity Framework Core。 Entity Framework 6 是一种久经验证的数据访问技术。 2008 年,它作为.NET Framework 3.5 SP1 和 Visual Studio 2008 SP1 的一部分首次发布。 从 4.1 版开始,已作为 EntityFramework NuGet 包发布。EF6 在.NET Framework 4.x 上运行,这意味着它仅在 Windows 上运行。 Entity Framework Core (EF Core) 是在 2016 年首次发布的 EF6 的完全重写。 它附带于 Nuget 包中, 是 Microsoft.EntityFrameworkCore 的主要组成部分。 EF Core 是一种跨平台产品,可以在.NET Core 或.NET Framework 上运行。 EF Core 旨在为开发人员提供类似于 EF6 的体验。EF Core 支持多个数据库引擎,包括 KingbaseES。为了支持 EF core,KingbaseES 提供了 Kdbndp.EntityFrameworkCore.KingbaseES。 2.2 KingbaseES 的 EFCore 方言包 Kdbndp.EntityFrameworkCore.KingbaseES 是 Kdbndp 实体框架(EF)核心程序。它的运行与其他 EF core 引 擎驱动程序(例如 SQL Server)类似。 当前 KingbaseES 支持 netstandard2.0 ef_core 2.0 及以上版本。 3 第 2 章 概述 方言包 适用范围 v9_efcore_net5.0.zip .net5.0 <= 适用范围 < 6.0 v9_efcore_net6.0.zip .net6.0 <= 适用范围 <7.0 v9_efcore_net7.0.zip .net7.0 <= 适用范围 <8.0 v9_efcore2.0.zip .netcore2.0 <= 适用范围 <=netcore2.1 v9_efcore3.0.zip .netcore3.0 注意: 目前安装包中携带的版本为 netstandard2.0(net core 2.0),如有其它版本需求,可至 人大金仓官网 进行下载。 4 第 3 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET CORE 中使用 (WINDOWS) 3 第 章 Kdbndp.EntityFrameworkCore.KingbaseES 在.net core 中使用 (windows) 本部分介绍了在 Windows 环境下,Kdbndp.EntityFrameworkCore.KingbaseES 在.net core 中的使用,包括数据 库连接字符串和参考用例。 • 数据库连接字符串 • 参考用例 3.1 数据库连接字符串 作用 连接数据库参数配置。 格式 相关使用,以及参数设置可参考 KingbaseES 客户端编程接口指南-ado.net 中 kdbndp 中连接字串的解析。 3.2 参考用例 目的 通过用例可了解如何引用 Kdbndp.EntityFrameworkCore.KingbaseES.dll, 在 程 序 中 如 何 使 用 Kdb- ndp.EntityFrameworkCore.KingbaseES。 系统必备 • NET Core 2.1 SDK 5 第 3 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET CORE 中使用 (WINDOWS) 操作步骤 1) 创建新项目 (通过命令行创建项目) • “工具”-> ”NuGet 包管理器”->” 程序包管理器控制台” • 新建控制台项目: dotnet new console -o ConsoleApp_Efcode 2) 更改当前目录 在后续步骤中,我们需要针对应用程序发出 dotnet 命令。 • 我们将当前目录更改为应用程序的目录,如下所示: cd ConsoleApp_Efcode/ 3) 安装 EntityFrameworkCore 以及使用到的依赖 dotnet add package Microsoft.EntityFrameworkCore.Design dotnet add package System.Runtime.CompilerServices.Unsafe 打开项目 ConsoleApp_Efcod, 会看到“依赖项”->“Nuget”下有如下引用: 6 第 3 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET CORE 中使用 (WINDOWS) 图 3.2.1: “Nuget”引用 添加 Kdbndp.EntityFrameworkCore.KingbaseES.dll,Kdbndp.dll 的引用:“依赖项”->“添加引用”添加 Kdbndp.dll 与 Kdbndp.EntityFrameworkCore.KingbaseES.dll。 4) 建模型 定义构成模型的上下文和实体类。 创建一个新的 Model.cs 文件,在文件中添加以下内容: using Microsoft.EntityFrameworkCore; using System.Collections.Generic; namespace ConsoleApp_Efcode { public enum State { None, 有用, 无用 7 第 3 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET CORE 中使用 (WINDOWS) } public class Modules : DbContext { public DbSet Kdb_Blog_Tests { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseKdbndp("Server=192.168.28.212;User ID=SYSTEM;Password=MANAGER; Database=KDBNDP_TESTS;Port=54328"); } public class Blog_Test { [Key] public Guid Id { get; set; } public Guid? Ids { get; set; } public string Name { get; set; } public bool Sex { get; set; } public bool? Sexy { get; set; } public int Age { get; set; } public int? Ager { get; set; } public DateTime Birth { get; set; } public DateTime? Birthy { get; set; } public float Money { get; set; } public float? Moneies { get; set; } public double Pi { get; set; } public double? Pis { get; set; } public State State { get; set; } public State? States { get; set; } [Timestamp] 8 第 3 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET CORE 中使用 (WINDOWS) public byte[] RowVersion { get; set; } } } 提示: 在实际应用程序中,将每个类放在单独的文件中,并将连接字符串放在配置文件或环境变量中。为 简化本教程,所有内容均放在一个文件中。 5) 创建数据库 有了模型后,即可通过迁移创建数据库,运行以下命令为迁移搭建基架,并为模型创建一组初始表: dotnet ef migrations add InitialCreate 命令执行成功以后,会生成如下文件: 图 3.2.2: 生成文件 如果执行命令时提示: Build failed. 检查程序中模型创建或程序中是否有错误。 运行以下命令将新迁移应用到数据库。在应用迁移之前,此命令可创建数据库。 9 第 3 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET CORE 中使用 (WINDOWS) dotnet ef database update 执行成功会显示如下信息: 图 3.2.3: 执行成功信息 查看数据库中是否创建对应模型对象的表->”Kdb_Blog_Tests”; 6) 使用模型 using System; namespace ConsoleApp_Efcode { public class Program { static void TestKdbndp_efcode() { using (var db = new Modules()) { db.Kdb_Blog_Tests.Add(new Blog_Test { Id = Guid.NewGuid(), Ids = Guid.NewGuid(), 10 第 3 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET CORE 中使用 (WINDOWS) Name = " 刘备", Sex = true, Sexy = true, Age = 45, Ager = 45, Birth = DateTime.Now, Birthy = DateTime.Now, Money = 1.5f, Moneies = 1.5f, Pi = 36.25, Pis = 36.25, State = State. 无用, States = State. 有用 }); var count = db.SaveChanges(); Console.WriteLine("{0} records saved to database", count); Console.WriteLine("All blogs in database:"); foreach (var blog in db.Kdb_Blog_Tests) { Console.WriteLine("Id: {0}", blog.Id); Console.WriteLine("Ids: {0}", blog.Ids); Console.WriteLine("Name: {0}", blog.Name); Console.WriteLine("Sex: {0}", blog.Sex); Console.WriteLine("Sexy: {0}", blog.Sexy); Console.WriteLine("Age: {0}", blog.Age); Console.WriteLine("Ager: {0}", blog.Ager); Console.WriteLine("Birth: {0}", blog.Birth); Console.WriteLine("Birthy: {0}", blog.Birthy); Console.WriteLine("Money: {0}", blog.Money); Console.WriteLine("Birthy: {0}", blog.Birthy); Console.WriteLine("Money: {0}", blog.Money); Console.WriteLine("Moneies: {0}", blog.Moneies); Console.WriteLine("Pi: {0}", blog.Pi); Console.WriteLine("Pis: {0}", blog.Pis); Console.WriteLine("State: {0}", blog.State); Console.WriteLine("States: {0}", blog.States); } } } static void Main(string[] args) { Console.WriteLine("Hello World!"); 11 第 3 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET CORE 中使用 (WINDOWS) TestKdbndp_efcode(); Console.ReadKey(); } } } 7) 从控制台测试应用 dotnet run 注意: 本例提供了 Kdbndp.EntityFrameworkCore.KingbaseES 的简单测试用例。 12 第 4 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET CORE 中使用 (LINUX) 4 第 章 Kdbndp.EntityFrameworkCore.KingbaseES 在.net core 中使用 (linux) 本部分介绍了在 Linux 环境下,Kdbndp.EntityFrameworkCore.KingbaseES 在.net core 中的使用方法。 驱动 Kdbndp.EntityFrameworkCore.KingbaseES 是使用在.Net Core 平台上的,在 Linux 系统上开发.NET Core 应用程序的两种方法: • 结合使用命令行 (dotnet) 和常用编辑器:使用 visual studio code 创建.NET 控制台应用程序 。 • Visual Studio Code 以下我们介绍的是使用命令行的方式来开发.NET Core 应用程序,如果想进一步了解 Visual Studio Code 的使 用,可参考: 微软官网 中的相关介绍。 • 系统必备 • 参考用例一 • 参考用例二 4.1 系统必备 4.1.1 环境 • .NET Core SDK 2.1 或者更高版本。 • 按需选择的文本编辑器或代码编辑器。 13 第 4 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET CORE 中使用 (LINUX) 4.1.2 安装 1. 可通过二进制包安装,下载地址: https://dotnet.microsoft.com/download/dotnet-core/2.2#sdk-2.2.401 2. 可通过 yum 命令安装: yum install rh-dotnet22 -y scl enable rh-dotnet22 bash 4.2 参考用例一 驱动在 windows .net core 项目中应用,项目编译成 dll, 将项目生成的 bin 下所有文件拷贝至 linux 系统下,通过 dotnet project.dll 运行。截图如下: 图 4.2.1: 通过 dotnet project.dll 运行 上图中 ConsoleApp_Efcode.dll 为项目生成的 dll,将 ConsoleApp_Efcode.deps.json 中罗列依赖的动态库一起拷 贝到运行目录下,截图如下: 14 第 4 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET CORE 中使用 (LINUX) 图 4.2.2: 将 ConsoleApp_Efcode.deps.json 中列出依赖的动态库一起拷贝到运行目录下 4.3 参考用例二 在 linux 下直接使用 dotnet 工具执行,具体步骤可参考 Kdbndp.EntityFrameworkCore.KingbaseES 在.net core(windows) 中使用。 15 第 5 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET FRAMEWORK 中使用 5 第 章 Kdbndp.EntityFrameworkCore.KingbaseES 在.net Framework 中使用 本部分介绍了 Kdbndp.EntityFrameworkCore.KingbaseES 在.net Framework 中的使用方法,包括数据库连接和 参考用例。 • 数据库连接字符串 • 参考用例 您可前往 人大金仓官网 下载 EFCore 测试用例 。 5.1 数据库连接字符串 作用: 连接数据库参数配置。 格式: 相关使用,以及参数设置可参考 KingbaseES 客户端编程接口指南-ado.net 中 kdbndp 中连接字串的解析。 5.2 参考用例 作用 通过用例可了解如何在.net framework 中如何引用和使用 Kdbndp.EntityFrameworkCore.KingbaseES.dll。 操作步骤 1) 创建新项目: 16 第 5 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET FRAMEWORK 中使用 1. 打开 Visual Studio 2017; 2. “文件”>“新建”>“项目...”; 3. 从左侧菜单中选择“已安装”> “Visual C#”> “.Net Core”; 4. 选择“控制台应用 (.NET Framework)”项目模板; 5. 确保项目面向.NET Framework 4.6.1 或更高版本; 6. 将项目命名为 Kdbndp_net_framework (项目名),并单击“确定”。 2) 安装 Entity Framework: 要使用 EF Core, 为 要 作 为 目 标 对 象 的 数 据 库 提 供 程 序 安 装 程 序 包 (本 例 提 供:Kdbndp.dll、Kdb- ndp.EntityFrameworkCore.KingbaseES.dll)。 3) 使用某些 Entity Framework Tools 维护数据库,请同时安装该工具包: 运行 Install-Package Microsoft.EntityFrameworkCore.Tools(备注:如果没有安装工具包的话,会无法在 Nuget “包控制台”中使用 Add-Migration 的相关命令)命令执行之后可见如下引用包: 17 第 5 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET FRAMEWORK 中使用 图 5.2.1: 运行 Install-Package Microsoft.EntityFrameworkCore.Tools 4) 创建模型 (实例): 1. 选择“项目”>“添加类...”; 2. 输入“Model.cs”作为名称,然后单击“确定”; 3. 将此文件的内容替换为以下代码: C# using System; using Microsoft.EntityFrameworkCore; using System.ComponentModel.DataAnnotations; using System.Collections.Generic; 18 第 5 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET FRAMEWORK 中使用 using System.IO; using System.Linq; using System.Text; namespace Kdbndp_net_framework { public enum State { None, 有用, 无用 } public class Modules : DbContext { public DbSet Kdb_Blog_Tests { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) => optionsBuilder.UseKdbndp("Server=192.168.28.212;User ID=SYSTEM;Password=MANAGER; Database=KDBNDP_TESTS;Port=54328"); } public class Blog_Test { [Key] public Guid Id { get; set; } public Guid? Ids { get; set; } public string Name { get; set; } public bool Sex { get; set; } public bool? Sexy { get; set; } public int Age { get; set; } public int? Ager { get; set; } public DateTime Birth { get; set; } public DateTime? Birthy { get; set; } public float Money { get; set; } public float? Moneies { get; set; } public double Pi { get; set; } public double? Pis { get; set; } public State State { get; set; } public State? States { get; set; } [Timestamp] public byte[] RowVersion { get; set; } } } 19 第 5 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET FRAMEWORK 中使用 5) 创建数据库 现在有了模型,就可以使用迁移创建数据库: 1. “工具”>“NuGet 包管理器”>“包管理器控制台”; 2. 运行 Add-Migration InitialCreate 为迁移搭建基架,以便为模型创建一组初始表; 3. 运行 Update-Database 以将新迁移应用到数据库。 由于数据库尚不存在,因此将在应用迁移之前进行创建。 创建之后参考以下模型文件: 20 第 5 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET FRAMEWORK 中使用 图 5.2.2: 模型文件 6) 使用模型 1. 打开 Program.cs; 2. 将此文件的内容替换为以下代码; using System; using System.Collections.Generic; using System.Linq; 21 第 5 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET FRAMEWORK 中使用 using System.Text; using System.Threading.Tasks; namespace Kdbndp_net_framework { class Program { static void TestKdbndp_efcode() { using (var db = new Modules()) { db.Kdb_Blog_Tests.Add(new Blog_Test { Id = Guid.NewGuid(), Ids = Guid.NewGuid(), Name = " 刘备", Sex = true, Sexy = true, Age = 45, Ager = 45, Birth = DateTime.Now, Birthy = DateTime.Now, Money = 1.5f, Moneies = 1.5f, Pi = 36.25, Pis = 36.25, State = State. 无用, States = State. 有用 }); var count = db.SaveChanges(); Console.WriteLine("{0} records saved to database", count); Console.WriteLine("All blogs in database:"); foreach (var blog in db.Kdb_Blog_Tests) { Console.WriteLine("Id: {0}", blog.Id); Console.WriteLine("Ids: {0}", blog.Ids); Console.WriteLine("Name: {0}", blog.Name); Console.WriteLine("Sex: {0}", blog.Sex); Console.WriteLine("Sexy: {0}", blog.Sexy); 22 第 5 章 KDBNDP.ENTITYFRAMEWORKCORE.KINGBASEES 在.NET FRAMEWORK 中使用 Console.WriteLine("Age: {0}", blog.Age); Console.WriteLine("Ager: {0}", blog.Ager); Console.WriteLine("Birth: {0}", blog.Birth); Console.WriteLine("Birthy: {0}", blog.Birthy); Console.WriteLine("Money: {0}", blog.Money); Console.WriteLine("Birthy: {0}", blog.Birthy); Console.WriteLine("Money: {0}", blog.Money); Console.WriteLine("Moneies: {0}", blog.Moneies); Console.WriteLine("Pi: {0}", blog.Pi); Console.WriteLine("Pis: {0}", blog.Pis); Console.WriteLine("State: {0}", blog.State); Console.WriteLine("States: {0}", blog.States); } } } static void Main(string[] args) { Console.WriteLine("Hello World!"); TestKdbndp_efcode(); Console.ReadKey(); } } } 23 版权声明 版权声明 北京人大金仓信息技术股份有限公司(简称:人大金仓)版权所有,并保留对本手册及本声明的一切权利。 未得到人大金仓的书面许可,任何人不得以任何方式或形式对本手册内的任何部分进行复制、摘录、备份、修 改、传播、翻译成其他语言、将其全部或部分用于商业用途。 免责声明 本手册内容依据现有信息制作,由于产品版本升级或其他原因,其内容有可能变更。人大金仓保留在没有任何通 知或者提示的情况下对手册内容进行修改的权利。 本手册仅作为使用指导,人大金仓在编写本手册时已尽力保证其内容准确可靠,但并不确保手册内容完全没有错 误或遗漏,本手册中的所有信息也不构成任何明示或暗示的担保。 技术支持 • 人大金仓官方网站:http://www.kingbase.com.cn/ • 人大金仓文档中心:http://help.kingbase.com.cn/ • 全国服务热线:400-601-1188 • 人大金仓技术支持与反馈信箱:support@kingbase.com.cn 24 服务周期承诺 服务周期承诺 由于市场需求在不断变化,技术创新和发展的进程不断加剧,产品的版本更迭不可避免。人大金仓对于产品版本 生命周期的有效管理,有助于您提前规划项目,更好地从产品服务终止上过渡。 表 1: KingbaseES 产品生命周期里程碑 关键里程碑点 定义 产品发布日期 产品正式发布版本,即 GA(general availability)版本的发布日期。 停止销售日期 正式停止销售的日期,版本停止接受订单日。该日之后,产品将不再销售。 停止功能升级日期 在该日期之后,不再提供新特性和新硬件支持。但依旧提供错误修复、安全修复、功 能维护等服务。 停止功能维护日期 在该日期之后,不再维护功能,修复问题。但依旧提供安全修复等服务 停止安全维护日期 在该日期之后,不再发布补丁版本修复中高风险漏洞,仅提供有限的支持。 产品服务终止日期 停止提供产品服务和支持的日期。包括软件维护版本,缺陷修复,以及针对该产品的 所有服务支持(包括服务热线和远程/现场支持)。 服务周期策略 金仓数据库管理系统 KingbaseES 产品确保以下的服务周期: 1)产品自发布之日起至产品停止功能升级(包含新特性、新硬件支持)之日不少于 5 年。 2)产品停止功能升级之日起至产品停止功能维护(主要包括问题修复)之日不少于 4 年。 3)产品功能维护停止之日起至产品停止安全维护(包括中高风险漏洞修复)之日不少于 2 年。 服务终止策略 金仓数据库管理系统 KingbaseES 产品确保在销售后,至少提供 6 年的服务支持。 注意: 人大金仓将会综合各方因素来确定产品服务终止日期。并将在实际产品服务终止日期之前至少 90 天,通过公 25 服务周期承诺 开方式宣布产品服务终止日期。 26