前言

DbContext类是EntityFramework (简称 EF)中的一个类,可以理解为一个数据库对象的实例。在 EF中,无需手动的拼接 SQL 语句对数据库进行增删改查,而是通过 DbContext 来进行相应操作。

叙述

DbContext类

DbContext类是实体框架的重要组成部分。它是您的域或实体类与数据库之间的桥梁。

DbContext是负责与数据交互作为对象的主要类。DbContext负责以下活动:
(1)EntitySet: DbContext包含映射到数据库表的所有实体的实体集(DbSet <TEntity>)。
(2)查询(Querying): DbContext将LINQ-to-Entities查询转换为SQL查询并将其发送到数据库。
(3)更改跟踪(Change Tracking):跟踪实体在从数据库查询后发生的更改。
(4)持久数据(Persisting Data):它还根据实体的状态对数据库执行插入,更新和删除操作。
(5)缓存(Caching): DbContext默认进行一级缓存。它存储在上下文类生命周期中已经被检索的实体。
(6)管理关系(Manage Relationship): DbContext还使用DB-First或Model-First方法使用CSDL,MSL和SSDL或者使用Code-First方法使用流利的API来管理关系。
(7)对象实现(Object Materialization): DbContext将原始表数据转换为实体对象。

以下是小编生成的excellentmcoinEntities类(派生DbContext的上下文类)的示例。

//------------------------------------------------------------------------------
// <auto-generated>
//    此代码是根据模板生成的。
//
//    手动更改此文件可能会导致应用程序中发生异常行为。
//    如果重新生成代码,则将覆盖对此文件的手动更改。
// </auto-generated>
//------------------------------------------------------------------------------namespace Model
{using System;using System.Data.Entity;using System.Data.Entity.Infrastructure;public partial class excellentmcoinEntities : DbContext{public excellentmcoinEntities(): base("name=excellentmcoinEntities"){}protected override void OnModelCreating(DbModelBuilder modelBuilder){throw new UnintentionalCodeFirstException();}public DbSet<t_accumulate> t_accumulate { get; set; }public DbSet<t_addmcoinrecord> t_addmcoinrecord { get; set; }public DbSet<t_announce> t_announce { get; set; }public DbSet<t_attribute> t_attribute { get; set; }public DbSet<t_attriuser> t_attriuser { get; set; }public DbSet<t_character> t_character { get; set; }public DbSet<t_controller> t_controller { get; set; }public DbSet<t_dayget> t_dayget { get; set; }public DbSet<t_department> t_department { get; set; }public DbSet<t_departmentgrade> t_departmentgrade { get; set; }public DbSet<t_departquestype> t_departquestype { get; set; }public DbSet<t_grade> t_grade { get; set; }public DbSet<t_healthytips> t_healthytips { get; set; }public DbSet<t_mcoin> t_mcoin { get; set; }public DbSet<t_mcoindb> t_mcoindb { get; set; }public DbSet<t_mcoindetail> t_mcoindetail { get; set; }public DbSet<t_pageset> t_pageset { get; set; }public DbSet<t_quesfamily> t_quesfamily { get; set; }public DbSet<t_quesfamilymemeber> t_quesfamilymemeber { get; set; }public DbSet<t_question> t_question { get; set; }public DbSet<t_questype> t_questype { get; set; }public DbSet<t_stageconfluence> t_stageconfluence { get; set; }public DbSet<t_states> t_states { get; set; }public DbSet<t_suggesstion> t_suggesstion { get; set; }public DbSet<t_type> t_type { get; set; }public DbSet<t_user> t_user { get; set; }public DbSet<t_attributerecord> t_attributerecord { get; set; }public DbSet<t_notice> t_notice { get; set; }}
}
excellentmcoinEntities : DbContext{public excellentmcoinEntities(): base("name=excellentmcoinEntities"){}protected override void OnModelCreating(DbModelBuilder modelBuilder){throw new UnintentionalCodeFirstException();}public DbSet<t_accumulate> t_accumulate { get; set; }public DbSet<t_addmcoinrecord> t_addmcoinrecord { get; set; }public DbSet<t_announce> t_announce { get; set; }public DbSet<t_attribute> t_attribute { get; set; }public DbSet<t_attriuser> t_attriuser { get; set; }public DbSet<t_character> t_character { get; set; }public DbSet<t_controller> t_controller { get; set; }public DbSet<t_dayget> t_dayget { get; set; }public DbSet<t_department> t_department { get; set; }public DbSet<t_departmentgrade> t_departmentgrade { get; set; }public DbSet<t_departquestype> t_departquestype { get; set; }public DbSet<t_grade> t_grade { get; set; }public DbSet<t_healthytips> t_healthytips { get; set; }public DbSet<t_mcoin> t_mcoin { get; set; }public DbSet<t_mcoindb> t_mcoindb { get; set; }public DbSet<t_mcoindetail> t_mcoindetail { get; set; }public DbSet<t_pageset> t_pageset { get; set; }public DbSet<t_quesfamily> t_quesfamily { get; set; }public DbSet<t_quesfamilymemeber> t_quesfamilymemeber { get; set; }public DbSet<t_question> t_question { get; set; }public DbSet<t_questype> t_questype { get; set; }public DbSet<t_stageconfluence> t_stageconfluence { get; set; }public DbSet<t_states> t_states { get; set; }public DbSet<t_suggesstion> t_suggesstion { get; set; }public DbSet<t_type> t_type { get; set; }public DbSet<t_user> t_user { get; set; }public DbSet<t_attributerecord> t_attributerecord { get; set; }public DbSet<t_notice> t_notice { get; set; }}
}

上下文类(excellentmcoinEntities)包含所有实体的DbSet <TEntity>类型的实体集。

DbContext具体使用

excellentmcoinEntities db = new excellentmcoinEntities();
//创建对象实体,注意,这里需要对所有属性进行赋值(除了自动增长主键外),如果不赋值,则会数据库中会被设置为NULL(注意是否可空)
var user = new User{Name = "bomo",Age = 21,Gender = "male"};
db.User.Add(user);
db.SaveChanges();

 public bool deleteUser(string UserID){excellentmcoinEntities dbcontext = new excellentmcoinEntities();try{string[] testUserID = UserID.Split(',');for (int i = 0; i < testUserID.Length; i++){t_user usermodel = dbcontext.t_user.Find(testUserID[i]);dbcontext.t_user.Remove(usermodel);int flag = dbcontext.SaveChanges();if (flag > 0){continue;}else{return false;}}return true;}catch (Exception){throw new Exception("删除失败");}}

public bool EditUser(t_user usermodel){excellentmcoinEntities dbcontext = new excellentmcoinEntities();try{t_user user = dbcontext.t_user.Find(usermodel.userID);if (user == null){return false;}user.userName = usermodel.userName;user.levelID = usermodel.levelID;user.state = usermodel.state;user.passWord = usermodel.passWord;//修改多个字段值dbcontext.Entry<t_user>(user).State = System.Data.EntityState.Modified;dbcontext.SaveChanges();return true;}catch (Exception){throw new Exception("用户修改失败");}}

   public List<userModel> QueryAUser(){//定义了上下文实体excellentmcoinEntities dbcontext = new excellentmcoinEntities();var allUser = (from u in dbcontext.t_userjoin g in dbcontext.t_grade on u.gradeID equals g.gradeIDorderby u.totalMcoin descendingselect new userModel(){userID = u.userID,userName = u.userName,userGrade = g.userGrade,totalMcoin = u.totalMcoin,gradeID = g.gradeID,}).ToList();return allUser;}

小结

DbContext通常与包含模型的根实体的DbSet <TEntity>属性的派生类型一起使用。当派生类的实例被创建时,这些集合会自动初始化。

【EF框架】DbContext的使用相关推荐

  1. .NET EF框架的安装、及三种开发模式

    一.EF框架的安装: 要在VS(如Visual Studio 2012)中使用EF框架,就需要先进行安装. 我们需要给这个应用安装EntityFramework包,引入EF框架相关的内容,我们需要引入 ...

  2. c ef框架-mysql_.net EF框架 MySql實現實例

    1.nuget中添加包EF和MySql.Data.Entity 2.config文件添加如下配置 1.配置entitframework節點(一般安裝EF時自動添加) 2.配置system.data節點 ...

  3. .net EF框架 MySql实现实例

    1.nuget中添加包EF和MySql.Data.Entity 2.config文件添加如下配置 1.配置entitframework节点(一般安装EF时自动添加) <entityFramewo ...

  4. Net EF框架+ MySql示例

    1.nuget中添加包EF和MySql.Data.Entity 2.config文件添加如下配置 1.配置entitframework节点(一般安装EF时自动添加) <entityFramewo ...

  5. MVC实战之排球计分(六)—— 使用EF框架,创建Controller,生成数据库。

    在上篇博客我们写到,此软件的数据库连接我们使用的是EF框架,code first模式下, 通过模型类,在创建controller的时候直接生成数据库,完成数据库的连接,与操作. 在使用EF框架之前,我 ...

  6. 【.NET】EF框架之三种模式

    使用EF之前必须要对EF有个宏观的了解.学习任何一种技术都要像门卫一样问几个问题. 第一,它是谁? 第二,从哪里来? 第三,到哪里去? 默念一遍:不谋全局者,不足谋一域. 今天老师宏观给讲了一下EF的 ...

  7. 【EF框架】EF框架的开发方法

    前言 EF框架具有有三种数据持久化的方式,分别为Code First,Model First,Database First.看一下它们都有什么联系? 叙述 EF框架的三种工作方式 1.Database ...

  8. EF 框架的简介、发展历史;ORM框架概念

    一.EF 框架简介 EF 全称是 EntityFramework .   Entity Framework是ADO.NET 中的一套支持开发面向数据的软件应用程序的技术,是微软的一个ORM框架. OR ...

  9. C# EF框架基础(非MVC)使用笔记

    什么是Entity Framework ? 微软官方提供的ORM工具,ORM让开发人员节省数据库访问的代码时间,将更多的时间放到业务逻辑层代码上.EF提供变更跟踪.唯一性约束.惰性加载.查询事物等.开 ...

  10. 基于EF框架的数据库操作方法

    一.关于建表,以及表与表之间的关系,关系逻辑规范等等. 1.EF中 int类型做主键的特殊情况处理 EF中,主键是int类型时,会自动认为该字段是自增长,导致生成的SQL语句中不会出现这个字段. 解决 ...

最新文章

  1. linux磁盘i o跟踪,利用zabbix动态监控磁盘I/O
  2. 生产者跟消费者问题(C++实现)
  3. 路由选项卡_M32全面培训第四讲——路由配置
  4. 链表快速排序python_Python一行代码实现快速排序的方法
  5. C++ STL之min_element()与max_element()(取容器中的最大最小值)
  6. ES6-ES11新特性_ECMAScript_简单介绍---JavaScript_ECMAScript工作笔记001
  7. 移动互联网向2.0时代转变
  8. android获取网络视频缩略图,Android 获取视频(本地和网络)缩略图的解决方案
  9. dtree树形结构异步传输
  10. SDWebImage的简单使用
  11. 主流视频编码器特点、优缺点归纳和比较(H.264、HEVC、VP9、AV1)
  12. commit rollback操作产生undo和redo?
  13. ElasticSearch(6.3.0)的配置和使用全过程
  14. 试题 算法训练 单词翻转 文章翻转 JAVA
  15. 记win10 ltsc版本wsappx进程CPU占用过高解决过程
  16. 上传渗透----中国菜刀和kali的使用(安全攻防)
  17. IEC61850笔记--开源代码libIEC61850(二)
  18. 华为轮值董事长郭平:华为重申不造车
  19. chrome使用的开源工程
  20. android设备驱动之 v4l2,Android设备驱动之——V4L2

热门文章

  1. 实现Windows 98与2000系统的数据共 实现Windows 98与2000系统的数据共享(转) 享(转)
  2. 前端和数据库学习的链接
  3. 两直线垂直的充要条件
  4. 配置SSH服务器到ARM开发板中使用
  5. 金融监管科技业务中的AI应用:上市公司风险识别
  6. Ubuntu18.04下VScode调试方法
  7. 【电气专业知识问答】问:大型发电机励磁电源的种类、要求和适用范围是什么?
  8. 幕墙:下料标准化(单面胶条1或2mm厚、结构胶用双面胶条、玻璃垫块)
  9. 基于stm32的智能防疫门禁管理系统
  10. 网络硬盘录像机NVR的接入、解码、转发能力解析