【EF框架】DbContext的使用

2023年1月22日10:58:54

前言

  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_user
                           join g in dbcontext.t_grade on u.gradeID equals g.gradeID
                           orderby u.totalMcoin descending
                           select new userModel()
                           {
                               userID = u.userID,
                               userName = u.userName,
                               userGrade = g.userGrade,
                               totalMcoin = u.totalMcoin,
                               gradeID = g.gradeID,
                           }).ToList();
            return allUser;
        }

小结

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

  • 作者:Hi-Sunshine
  • 原文链接:https://zmh6688.blog.csdn.net/article/details/78935172
    更新时间:2023年1月22日10:58:54 ,共 5616 字。