EntityFramework入门:配置DbContext以及增、删、改、查、事务操作
作者:C/S框架网|www.csframewo  发布日期:2022/11/24 13:23:26
  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


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



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



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



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



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



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



三、演练源码下载







C/S框架网|原创精神.创造价值.打造精品


扫一扫加作者微信
C/S框架网作者微信 C/S框架网|原创作品.质量保障.竭诚为您服务
点击下载附件 点击下载附件 (如下载失败,请邮件通知我们寄回给您,或QQ:23404761留言.)
上一篇 下一篇