EntityFramework入门:配置DbContext以及增、删、改、查、事务操作
EntityFramework入门:配置DbContext以及增、删、改、查、事务操作一、EntityFramework简介
Entity Framework 的全称为 ADO.NET Entity Framework,简称 EF。
1.1 EF与 ADO.NET 的关系
Entity Framework(实体框架)是微软以 ADO.NET 为基础所发展出来的对象关系对应(O/R Mapping)解决方案,早期被称为 ObjectSpace,目前 CodeOnly 功能得到更好的支持,是微软的一个 ORM 框架,其他基于 .NET 开发的 ORM 框架有 Nibernate、PetaPoco 等。
1.2 Entity Framework 的特点:
支持多种数据库(MSSQL、Oracle、Mysql 和 DB2)。
强劲的映射引擎,能很好的支持储存过程。
提供 Visual Studio 集成工具、可视化操作。
能够与 ASP.NET、WPF、WCF、WCF Data Services 进行很好的集成。
1.3 ORM/什么是O/R Mapping
广义上,ORM 指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。狭义上,ORM 可以被认为是基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口,基于这样一个面向对象的接口,持久化一个OO对象应该不需要了解任何关系型数据库存储数据的实现细节。
1.4 DbContext类
DbContext 实例表示与数据库的会话,可用于查询和保存实体的实例。
DbContext是主要的类负责数据和对象互相转化。
二、EntityFramework实例演练
2.1 配置数据库连接
app.config文件添加数据库连接:
XML Code:
<connectionStrings>
<add name="Normal" connectionString="Server=192.168.0.1;Database=CSFrameworkV5_Normal;User ID=sa;Password=test; Max Pool Size=512; Pooling=true;Connect Timeout=30" providerName="System.Data.SqlClient"/>
</connectionStrings>
//来源:C/S框架网 | www.csframework.com | QQ:23404761
<add name="Normal" connectionString="Server=192.168.0.1;Database=CSFrameworkV5_Normal;User ID=sa;Password=test; Max Pool Size=512; Pooling=true;Connect Timeout=30" providerName="System.Data.SqlClient"/>
</connectionStrings>
//来源:C/S框架网 | www.csframework.com | QQ:23404761
2.2 继承DbContext类,扩展CustomerData
C# Code:
/// <summary>
/// 客户资料,继承 DbContext
/// </summary>
public class CustomerData : DbContext
{
/// <summary>
/// 构造器
/// </summary>
/// <param name="connString">连接字符串</param>
public CustomerData(string connString) : base(connString)
{
//
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
/// <summary>
/// 客户资料
/// </summary>
public DbSet<tb_Customer> CustomerList { get; set; }
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 客户资料,继承 DbContext
/// </summary>
public class CustomerData : DbContext
{
/// <summary>
/// 构造器
/// </summary>
/// <param name="connString">连接字符串</param>
public CustomerData(string connString) : base(connString)
{
//
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
/// <summary>
/// 客户资料
/// </summary>
public DbSet<tb_Customer> CustomerList { get; set; }
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
2.3 增、删、改操作
C# Code:
var customer = new tb_Customer
{
CustomerCode = "csframework.1",
NativeName = "C/S框架网",
EnglishName = "www.csframework.com",
Address1 = "广东省珠海市",
};
using (var context = CreateDbContext())
{
//新增
var obj = context.CustomerList.Add(customer);
int i = context.SaveChanges();
MessageBox.Show("add:" + i.ToString());
//修改
obj = context.CustomerList.Where(w => w.CustomerCode == customer.CustomerCode).FirstOrDefault();
obj.NativeName = "修改的客户名称";
i = context.SaveChanges();
MessageBox.Show("edit:" + i.ToString());
//删除
context.CustomerList.Remove(obj);
i = context.SaveChanges();
MessageBox.Show("del:" + i.ToString());
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
{
CustomerCode = "csframework.1",
NativeName = "C/S框架网",
EnglishName = "www.csframework.com",
Address1 = "广东省珠海市",
};
using (var context = CreateDbContext())
{
//新增
var obj = context.CustomerList.Add(customer);
int i = context.SaveChanges();
MessageBox.Show("add:" + i.ToString());
//修改
obj = context.CustomerList.Where(w => w.CustomerCode == customer.CustomerCode).FirstOrDefault();
obj.NativeName = "修改的客户名称";
i = context.SaveChanges();
MessageBox.Show("edit:" + i.ToString());
//删除
context.CustomerList.Remove(obj);
i = context.SaveChanges();
MessageBox.Show("del:" + i.ToString());
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
2.4 事务操作
C# Code:
//事务
using (var context = CreateDbContext())
{
using (var tran = context.Database.BeginTransaction())
{
try
{
context.CustomerList.Add(new tb_Customer { CustomerCode = "csframework.001" });
context.CustomerList.Add(new tb_Customer { CustomerCode = "csframework.002" });
context.SaveChanges();
//模拟处理其他表数据
var obj = context.CustomerList.Where(w => w.CustomerCode == "csframework.001").FirstOrDefault();
if (obj != null)
{
context.CustomerList.Remove(obj);
context.SaveChanges();
}
tran.Commit();
MessageBox.Show("tran ok!");
}
catch(Exception ex)
{
tran.Rollback();
MessageBox.Show("tran failed!");
}
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
using (var context = CreateDbContext())
{
using (var tran = context.Database.BeginTransaction())
{
try
{
context.CustomerList.Add(new tb_Customer { CustomerCode = "csframework.001" });
context.CustomerList.Add(new tb_Customer { CustomerCode = "csframework.002" });
context.SaveChanges();
//模拟处理其他表数据
var obj = context.CustomerList.Where(w => w.CustomerCode == "csframework.001").FirstOrDefault();
if (obj != null)
{
context.CustomerList.Remove(obj);
context.SaveChanges();
}
tran.Commit();
MessageBox.Show("tran ok!");
}
catch(Exception ex)
{
tran.Rollback();
MessageBox.Show("tran failed!");
}
}
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
2.5 获取列表
C# Code:
//查询列表
using (var context = CreateDbContext())
{
var list = context.CustomerList.Where(w => w.CustomerCode.Contains("csframework")).ToList();
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = list;
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
using (var context = CreateDbContext())
{
var list = context.CustomerList.Where(w => w.CustomerCode.Contains("csframework")).ToList();
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = list;
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
2.6 实例化 DbContext
C# Code:
/// <summary>
/// 创建客户管理上下文实例(DbContext)
/// </summary>
/// <returns></returns>
private CustomerData CreateDbContext()
{
var context = new CustomerData(System.Configuration.ConfigurationManager.ConnectionStrings["Normal"].ConnectionString);
return context;
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// 创建客户管理上下文实例(DbContext)
/// </summary>
/// <returns></returns>
private CustomerData CreateDbContext()
{
var context = new CustomerData(System.Configuration.ConfigurationManager.ConnectionStrings["Normal"].ConnectionString);
return context;
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
2.7 tb_Customer 模型
C# Code:
///<summary>
/// ORM模型, 数据表:tb_Customer,由ClassGenerator自动生成
/// </summary>
[Table("tb_Customer")]
public class tb_Customer
{
#region 所有字段属性
[Key, Column(Order = 1)]
public System.Int32? ISID { get; set; }
public System.String CustomerCode { get; set; }
public System.String NativeName { get; set; }
public System.String EnglishName { get; set; }
public System.String AttributeCodes { get; set; }
public System.String Address1 { get; set; }
public System.String Address2 { get; set; }
public System.String Address3 { get; set; }
public System.String Country { get; set; }
public System.String Region { get; set; }
public System.String City { get; set; }
public System.String CountryCode { get; set; }
public System.String CityCode { get; set; }
public System.String Tel { get; set; }
public System.String Fax { get; set; }
public System.String PostalCode { get; set; }
public System.String ZipCode { get; set; }
public System.String WebAddress { get; set; }
public System.String Email { get; set; }
public System.String Bank { get; set; }
public System.String BankAccount { get; set; }
public System.String BankAddress { get; set; }
public System.String ContactPerson { get; set; }
public System.String Remark { get; set; }
public System.String InUse { get; set; }
public System.Int32? PaymentTerm { get; set; }
public System.DateTime? CreationDate { get; set; }
public System.String CreatedBy { get; set; }
public System.DateTime? LastUpdateDate { get; set; }
public System.String LastUpdatedBy { get; set; }
#endregion
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
/// ORM模型, 数据表:tb_Customer,由ClassGenerator自动生成
/// </summary>
[Table("tb_Customer")]
public class tb_Customer
{
#region 所有字段属性
[Key, Column(Order = 1)]
public System.Int32? ISID { get; set; }
public System.String CustomerCode { get; set; }
public System.String NativeName { get; set; }
public System.String EnglishName { get; set; }
public System.String AttributeCodes { get; set; }
public System.String Address1 { get; set; }
public System.String Address2 { get; set; }
public System.String Address3 { get; set; }
public System.String Country { get; set; }
public System.String Region { get; set; }
public System.String City { get; set; }
public System.String CountryCode { get; set; }
public System.String CityCode { get; set; }
public System.String Tel { get; set; }
public System.String Fax { get; set; }
public System.String PostalCode { get; set; }
public System.String ZipCode { get; set; }
public System.String WebAddress { get; set; }
public System.String Email { get; set; }
public System.String Bank { get; set; }
public System.String BankAccount { get; set; }
public System.String BankAddress { get; set; }
public System.String ContactPerson { get; set; }
public System.String Remark { get; set; }
public System.String InUse { get; set; }
public System.Int32? PaymentTerm { get; set; }
public System.DateTime? CreationDate { get; set; }
public System.String CreatedBy { get; set; }
public System.DateTime? LastUpdateDate { get; set; }
public System.String LastUpdatedBy { get; set; }
#endregion
}
//来源:C/S框架网 | www.csframework.com | QQ:23404761
三、演练源码下载

参考文档:
EntityFramework通用DbContext类,支持动态实体模型,多数据库(MySQL,SqlServer,Oracle)
达梦数据库DmException: 变量空间溢出 [sql]: INSERT INTO,Microsoft.EntityFrameworkCore.DbUpdateException|C/S开发框架
达梦数据库入门基础|C/S框架网|C/S开发框架
C# .NET 入门概念与知识点总结|C/S开发框架
新手入门指南 - 初始化CMS系统-C/S开发框架
MQ消息队列(1)RabbitMQ入门介绍及环境搭建-C/S开发框架
ASP.NET MVC快速入门(一)-C/S开发框架
ASP.NET Web API入门介绍(一)-C/S开发框架
CSFramework开发框架旗舰版V5-新手入门教程-新手指南-用户操作手册
CSFramework.WebApi新手入门实战开发教程(C#+VS2017)
C/S快速开发框架旗舰版CSFrameworkV6.0 | VS开发环境配置|C/S开发框架
FastReport.NET 2023使用DataTable报表数据源配置JsonDataSourceConnection连接|C/S开发框架
FastReport.NET 2023使用DataTable报表数据源配置MsSqlDataConnection连接|C/S开发框架
.NETCore WebApi框架:从appsettings.json 读取参数配置|C/S开发框架
MySql数据库连接字符串(ConnectionString)配置参数大全|C/S开发框架
EFCore 重写DbContext.SaveChanges方法,避免多个实例跟踪发生错误|C/S开发框架
EntityFramework通用DbContext类,支持动态实体模型,多数据库(MySQL,SqlServer,Oracle)
达梦数据库DmException: 变量空间溢出 [sql]: INSERT INTO,Microsoft.EntityFrameworkCore.DbUpdateException|C/S开发框架
达梦数据库入门基础|C/S框架网|C/S开发框架
C# .NET 入门概念与知识点总结|C/S开发框架
新手入门指南 - 初始化CMS系统-C/S开发框架
MQ消息队列(1)RabbitMQ入门介绍及环境搭建-C/S开发框架
ASP.NET MVC快速入门(一)-C/S开发框架
ASP.NET Web API入门介绍(一)-C/S开发框架
CSFramework开发框架旗舰版V5-新手入门教程-新手指南-用户操作手册
CSFramework.WebApi新手入门实战开发教程(C#+VS2017)
C/S快速开发框架旗舰版CSFrameworkV6.0 | VS开发环境配置|C/S开发框架
FastReport.NET 2023使用DataTable报表数据源配置JsonDataSourceConnection连接|C/S开发框架
FastReport.NET 2023使用DataTable报表数据源配置MsSqlDataConnection连接|C/S开发框架
.NETCore WebApi框架:从appsettings.json 读取参数配置|C/S开发框架
MySql数据库连接字符串(ConnectionString)配置参数大全|C/S开发框架
EFCore 重写DbContext.SaveChanges方法,避免多个实例跟踪发生错误|C/S开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 |
在线客服
