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();

        }
    }
}

参考:

EF Core中如何取消跟踪DbContext中所有被跟踪的实体 - PowerCoder - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

csdn_aspnet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值