Efcore 使用KingbaseES数据库

  1. Kdbndp.EntityFrameworkCore.KingbaseES介绍
    1.1. 背景
    微软为了支持.NET 开发人员使用 .NET 对象处理数据库的对象关系映射程序 (O/RM),开发出了一种(O/RM) 框架Entity Framework。它不要求提供开发人员通常需要编写的大部分数据访问代码。Entity Framework目前支持两个版本:Entity Framework 6 和 Entity Framework Core。
    1.1.1. Entity Framework 6 (EF6)
    是一种久经验证的数据访问技术。 2008 年,它作为 .NET Framework 3.5 SP1 和 Visual Studio 2008 SP1 的一部分首次发布。 从 4.1 版开始,已作为 EntityFramework NuGet 包发布。EF6 在 .NET Framework 4.x 上运行,这意味着它仅在 Windows 上运行。
    1.1.2. Entity Framework Core (EF Core)
    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。
    1.2. 定义
    Kdbndp.EntityFrameworkCore.KingbaseES是Kdbndp实体框架(EF)核心程序。它的行为与其他EF core引擎驱动程序(例如SQL Server)类似。
    1.3. 支持版本
    netstandard2.0 ef_core 2.2.4
  2. Kdbndp.EntityFrameworkCore.KingbaseES在.net core中使用(windows)
    2.1. 数据库连接字符串
    作用:
    连接数据库参数配置
    格式:
    相关使用,以及参数设置可参考《Kdbndp使用手册.docx》 中连接字串的解析。
    2.2. 参考用例
    2.2.1. 目的:
    通过用例可了解如何引用Kdbndp.EntityFrameworkCore.KingbaseES.dll,在程序中如何使用Kdbndp.EntityFrameworkCore.KingbaseES。
    2.2.2. 步骤:
    1)系统必备
  • NET Core 2.1 SDK 或以上版本
    2)创建新项目(通过命令行创建项目)

  • “工具” -> “NuGet包管理器” -> “程序包管理器控制台”

  • 新建控制台项目:
    dotnet new console -o ConsoleApp_Efcode
    3)更改当前目录

  • 在后续步骤中,我们需要针对应用程序发出 dotnet 命令。

  • 我们将当前目录更改为应用程序的目录,如下所示:
    cd ConsoleApp_Efcode/
    4)安装EntityFrameworkCore以及使用到的依赖
    dotnet add package Microsoft.EntityFrameworkCore.Design -v 2.2.4
    dotnet add package System.Runtime.CompilerServices.Unsafe -v 4.5.2
    打开项目ConsoleApp_Efcod,会看到“依赖项”->“Nuget”下有如下引用:
    Efcore 使用KingbaseES数据库
    添加Kdbndp.EntityFrameworkCore.KingbaseES.dll,Kdbndp.dll的引用:“依赖项”->“添加引用”添加Kdbndp.dll与Kdbndp.EntityFrameworkCore.KingbaseES.dll
    5)建模型
    定义构成模型的上下文和实体类:
    创建一个新的 Model.cs 文件添加使用以下内容:
    using Microsoft.EntityFrameworkCore;
    using System.Collections.Generic;

    namespace ConsoleApp_Efcode
    {
       public enum State
       {
          None,
          有用,
          无用
       }
    
       public class Modules : DbContext
       {
          public DbSet<Blog_Test> 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; }
       }
    }
    

提示:在实际应用程序中,将每个类放在单独的文件中,并将连接字符串放在配置文件或环境变量中。为简化本教程,所有内容均放在一个文件中。
6)创建数据库
有了模型后,即可通过迁移创建数据库,运行以下命令为迁移搭建基架,并为模型创建一组初始表:
dotnet ef migrations add InitialCreate
命令执行成功以后,会生成如下文件:
Efcore 使用KingbaseES数据库
如果执行命令时提示:
Build failed.
检查程序中模型创建或程序中是否有错误。
或者提示:
dotnet ef不存在,可参考微软官方文档,地址如下:https://docs.microsoft.com/zh-tw/ef/core/miscellaneous/cli/dotnet
dotnet tool install --global dotnet-ef --version 3.0.0-*

运行以下命令将新迁移应用到数据库。 在应用迁移之前,此命令可创建数据库。
dotnet ef database update
执行成功会显示如下信息:
Efcore 使用KingbaseES数据库
查看数据库中是否创建对应模型对象的表->“Kdb_Blog_Tests”;
7)使用模型
using System;
namespace ConsoleApp_Efcode
{
public class Program
{
// Kdbndp_efcode测试用例
static void TestKdbndp_efcode()
{
using (var db = new Modules())
{
// add data
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:”);

           //search data
           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!");
        TestKdbndp_efcode();
        Console.ReadKey();
     }
  }

}
8)从控制台测试应用
dotnet run
备注:本例提供了Kdbndp.EntityFrameworkCore.KingbaseES的简单测试用例。

  1. Kdbndp.EntityFrameworkCore.KingbaseES在.net core中使用(linux)
    驱动Kdbndp.EntityFrameworkCore.KingbaseES是使用在.Net Core平台上的,在Linux 系统上开发 .NET Core 应用程序的两种方法:
     结合使用命令行(dotnet)和常用编辑器
     Visual Studio Code
    以下我们介绍的是使用命令行的方式来开发.NET Core应用程序,如果想进一步了解Visual Studio Code的方式,可参考:
    https://docs.microsoft.com/zh-cn/dotnet/core/linux-prerequisites?tabs=netcore2x中的相关介绍。
    3.1. 系统必备
    3.1.1. 环境:
     .NET Core SDK 2.1或者更高版本。
     按需选择的文本编辑器或代码编辑器。
    3.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
    3.2. 使用参考用例一
    驱动在windows .net core项目中应用,项目编译成dll,将项目生成的bin下所有文件拷贝至linux系统下,通过dotnet project.dll运行。截图如下:
    Efcore 使用KingbaseES数据库
    上图中ConsoleApp_Efcode.dll为项目生成的dll,将ConsoleApp_Efcode.deps.json中罗列依赖的动态库一起拷贝到运行目录下,截图如下:
    Efcore 使用KingbaseES数据库
    3.3. 使用参考用例二
    在linux下直接使用dotnet工具执行,步骤可参照Kdbndp.EntityFrameworkCore.KingbaseES在.net core(windows) 中使用。
  1. 在.net Framework 中使用
    4.1. 连接串
    作用:
    连接数据库参数配置
    格式:
    “Server=192.168.29.102;User ID=root;Password=123456;Database=TEST;Port=54322”
    4.2. 参考用例
    4.2.1. 作用:
    通过用例可了解如何在.net framework中如何引用和使用Kdbndp.EntityFrameworkCore.KingbaseES.dll
    4.2.2. 步骤:
  1. 创建新项目:
  • 打开 Visual Studio 2017;
  • “文件”>“新建”>“项目…”;
  • 从左侧菜单中选择“已安装”>“Visual C#”->“.Net Core”;
  • 选择“控制台应用(.NET Framework)”项目模板;
  • 确保项目面向 .NET Framework 4.6.1 或更高版本;
  • 将项目命名为 Kdbndp_net_framework (项目名),并单击“确定”。
  1. 安装 Entity Framework:
    要使用 EF Core,为要作为目标对象的数据库提供程序安装程序包(本例提供:Kdbndp.dll、Kdbndp.EntityFrameworkCore.KingbaseES.dll);
  2. 使用某些 Entity Framework Tools 维护数据库,请同时安装该工具包。
    运行 Install-Package Microsoft.EntityFrameworkCore.Tools
    (备注:如果没有安装工具包的话,会无法在Nuget“包控制台”中使用Add- Migration 的相关命令)
    命令执行之后可见如下引用包:
    Efcore 使用KingbaseES数据库
  3. 创建模型(实例):
  • “项目”>“添加类…”;
  • 输入“Model.cs”作为名称,然后单击“确定”;
  • 将此文件的内容替换为以下代码:
    C#
    using System;
    using Microsoft.EntityFrameworkCore;
    using System.ComponentModel.DataAnnotations;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;

namespace Kdbndp_net_framework
{
public enum State
{
None,
有用,
无用
}

public class Modules : DbContext
{
    public DbSet<Blog_Test> 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; }
}

}
5) 创建数据库

  • 现在有了模型,就可以使用迁移创建数据库。
  • “工具”>“NuGet 包管理器”>“包管理器控制台”
  • 运行 Add-Migration InitialCreate 为迁移搭建基架,以便为模型创建一组初始表。
  • 运行 Update-Database 以将新迁移应用到数据库。 由于数据库尚不存在,因此将在应用迁移之前进行创建。
    创建之后可以以下模型文件:
    Efcore 使用KingbaseES数据库
  1. 使用模型
  • 打开 Program.cs;
  • 将此文件的内容替换为以下代码;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

namespace Kdbndp_net_framework
{
class Program
{
// Kdbndp _efcode测试用例
static void TestKdbndp_efcode()
{
using (var db = new Modules())
{
// add data
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:");

            //search
            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!");

        TestKdbndp_efcode();

        Console.ReadKey();
    }
}

}
4.2.3. 参考用例(表逆向为类)
dotnet ef dbcontext scaffold “Host=192.168.29.102;Database=TEST2;Username=SYSTEM;Password=123456;Port=54321” Kdbndp.EntityFrameworkCore.KingbaseES -o Entity

上一篇:git出现git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.


下一篇:(git)Warning: Permanently added the ECDSA host key for IP address '212.64.62.174' to the l