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();
    
            }
        }
    }
  • 相关阅读:
    java,jenkins
    docker compose,link,Odoo
    nginx,docker反向代理
    centos7上安装docker-ce社区版
    Install Rancher server
    docker公司测试环境搭建总结
    ansible+docker
    桥接物理网卡,pipwork指定ip,外网连接,研究salt+docker
    20170605
    20170602
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/10217772.html
Copyright © 2011-2022 走看看