zoukankan      html  css  js  c++  java
  • EF Core中如何取消跟踪DbContext中所有被跟踪的实体

    首先定义一个DbContext的扩展类DbContextDetachAllExtension,其中包含一个DbContext的扩展方法DetachAll,用来取消跟踪DbContext中所有被跟踪的实体:

    using Microsoft.EntityFrameworkCore;
    using System.Linq;
    
    namespace DbContextUtils
    {
        /// <summary>
        /// DbContext的扩展类
        /// </summary>
        public static class DbContextDetachAllExtension
        {
            /// <summary>
            /// 取消跟踪DbContext中所有被跟踪的实体
            /// </summary>
            public static void DetachAll(this DbContext dbContext)
            {
                //循环遍历DbContext中所有被跟踪的实体
                while (true)
                {
                    //每次循环获取DbContext中一个被跟踪的实体
                    var currentEntry = dbContext.ChangeTracker.Entries().FirstOrDefault();
    
                    //currentEntry不为null,就将其State设置为EntityState.Detached,即取消跟踪该实体
                    if (currentEntry != null)
                    {
                        //设置实体State为EntityState.Detached,取消跟踪该实体,之后dbContext.ChangeTracker.Entries().Count()的值会减1
                        currentEntry.State = EntityState.Detached;
                    }
                    //currentEntry为null,表示DbContext中已经没有被跟踪的实体了,则跳出循环
                    else
                    {
                        break;
                    }
                }
            }
        }
    }

    其用法如下:

    using ConsoleApp1.Entities;
    using DbContextUtils;
    using System;
    using System.Linq;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (DemoContext dbContext = new DemoContext())
                {
                    var Persons = dbContext.Person.ToList();
    
                    dbContext.DetachAll();
                }
    
                Console.WriteLine("Press key..");
                Console.ReadKey();
    
            }
        }
    }
  • 相关阅读:
    PHP中each与list用法分析
    三大范式通俗讲解
    数据库三大范式详解
    利用JS制作简便计算器
    CSS下拉列表错误纠正
    下拉列表
    CSS选择器、标签,div的位置。
    php注册审核
    php分页查询
    php投票练习
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/10217772.html
Copyright © 2011-2022 走看看