第一章 EntityFramework6.Kdbndp介绍
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 的开发人员体验。EF6支持多个数据库引擎,包括KingbaseES,为了支持EF6,KingbaseES提供了EntityFramework6.Kdbndp。
1.2. 定义
EntityFramework6.Kdbndp是Kdbndp实体框架(EF)核心程序。它的行为与其他EF6引擎驱动程序(例如SQL Server)类似。(备注:EF6 在 .NET Framework 4.x 上运行,这意味着它仅在 Windows 上运行)
1.3. 支持版本
net45
第二章 EntityFramework6.Kdbndp使用
2.1. 数据库连接字符串
作用:
连接数据库参数配置
格式:
相关使用,以及参数设置可参考《Kdbndp使用手册.docx》 中连接字串的解析;
2.2. 参考用例一
2.2.1. 目的:
通过用例可了解如何引用EntityFramework6.Kdbndp.dll,在程序中如何使用EntityFramework6.Kdbndp。
2.2.2. 步骤:
1)系统必备
所需VS版本不低于Visual Studio 2010,如果使用 Visual Studio 2010,您还需要安装NuGet。
2)创建应用程序
为了简单起见,我们要构建使用 Code First 来执行数据访问的基本的控制台应用程序。
• 打开 Visual Studio
• 文件->新增->项目…
• 选择Windows左侧的菜单和控制台应用程序
• 输入kb_ef6_test作为名称
• 选择“确定”
3)定义模型
-
添加类文件Modules.cs
- 在添加类文件中添加如下代码:
public enum State
{
None,
有用,
无用
}
public class 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; }
public byte[] RowVersion { get; set; }
}
(备注:byte[]定义的变量属性不能用Data Annatation 标记为[TimeStamp],标记会出现错误)
4)创建上下文 - 在添加类文件中添加如下代码:
-
定义派生的上下文,它表示我们在数据库中能够查询和保存数据的会话。 定义的上下文,它派生自 System.Data.Entity.DbContext。
-
为了使用实体框架中的类型,我们需要添加 EntityFramework NuGet 包。在Nuget控制台中输入命令:
Install-Package EntityFramework -
在“引用”中添加EntityFramework6.Kdbndp.dll,Kdbndp.dll的引用。
在Modules.cs 的顶部添加 using 语句
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;
C#
public class BloggingContext : DbContext
{
public BloggingContext()
: base(“name=TestKbContext”)
{
}
public DbSet Blogs { get; set; }
}
红色标记为连接数据库字符串名。
5)在App.config或Web.config
1、 连接数据库的配置
2、 添加provider相关信息,标红部分
3、 添加system.data
6)建模型
在Nuget控制台中依次输入一下命令:
Enable-Migrations
Add-Migration InitialCreate
Update-Database
执行完前两条命令只有会生成如下文件:
7)操作使用模型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace kb_ef6_test
{
class Program
{
static void Print(Modules db,String strShowInfo)
{
var query = from b in db.KB_Tests
orderby b.Name
select b;
Console.WriteLine(strShowInfo);
foreach (var item in query)
{
Console.WriteLine(item.Name);
}
Console.WriteLine("data search over....");
}
static void Main(string[] args)
{
using (var db = new Modules())
{
// add data
var blog = new 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.有用,
RowVersion = Enumerable.Repeat((byte)0x08, 10).ToArray()
};
db.KB_Tests.Add(blog);
db.SaveChanges();
// search
Print(db, "search data after add");
// update
var temp = db.KB_Tests.FirstOrDefault(s => s.Name == "刘备");
temp.Name = "张飞";
db.SaveChanges();
Print(db, "search data after update");
// delete
temp = db.KB_Tests.FirstOrDefault(s => s.Name == "刘备");
db.KB_Tests.Remove(temp);
db.SaveChanges();
Print(db, "search data after delete");
}
Console.WriteLine("press any key to exit.......");
Console.ReadKey();
}
}
}
2.3. 参考用例二(模型变更:在模型中添加新表或字段)
在用例一的基础上,如果需要在模型中添加新的表或者为原有模型表中添加字段,则可使用一下步骤:
- 更新模型数据
Update-Database –Verbose (备注:添加参数 –Verbose可以看到更新打印的详细信息,这样有助查询更新失败或者错误的原因) - 通过Migration生成新的模型文件
Add-Migration 模型名称 - 更新模型数据到数据库
Update-Database –Verbose - 简单实例
在实例一的基础上添加新表类。
public class Test2
{
[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; }
public byte[] RowVersion { get; set; }
}
public class BloggingContext : DbContext
{
public BloggingContext()
: base(“name=TestKbContext”)
{
}
public DbSet Blogs { get; set; }
public DbSet Test2s{ get; set; }
}
在“程序包管理控制台”执行:
Add-Migration Test2s
会生成如下类似文件:
继续执行:
Update-Database –Verbose
即可在数据库中生成新添加的类对应的表。



