笔记:在Entity Framework Core中使用乐观并发控制来处理数据更新的冲突

一、目的:

        在Entity Framework Core (EF Core) 中配置乐观并发控制主要涉及到使用并发令牌。并发令牌是在模型中定义的属性,用于在数据库操作期间检测并发冲突。当两个或更多用户尝试同时更新同一条记录时,EF Core 会使用这些令牌来确定是否有其他用户已经修改了数据。


二、实现

1. 定义并发令牌


你可以通过在实体类的属性上使用[ConcurrencyCheck]属性或使用Fluent API的.IsConcurrencyToken()方法来定义并发令牌。

using System.ComponentModel.DataAnnotations;public class SomeEntity
{public int Id { get; set; }[ConcurrencyCheck]public string ConcurrencyToken { get; set; }
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{modelBuilder.Entity<SomeEntity>().Property(e => e.ConcurrencyToken).IsConcurrencyToken();
}

 2. 处理并发冲突


当发生并发更新时,EF Core会抛出一个DbUpdateConcurrencyException异常。你需要捕获这个异常并根据你的业务逻辑处理冲突。处理并发冲突通常涉及到重新加载实体的最新版本,让用户决定如何解决冲突,或者自动重试更新。

try
{// 尝试保存更改到数据库context.SaveChanges();
}
catch (DbUpdateConcurrencyException ex)
{// 处理并发冲突// 例如,可以重新加载实体的最新状态foreach (var entry in ex.Entries){var proposedValues = entry.CurrentValues;var databaseValues = entry.GetDatabaseValues();foreach (var property in proposedValues.Properties){var proposedValue = proposedValues[property];var databaseValue = databaseValues[property];// TODO: 决定如何解决冲突// 例如,可以选择保留数据库的值或用户提出的值}// 更新原始值以匹配数据库的当前值entry.OriginalValues.SetValues(databaseValues);}// 重新尝试保存更改context.SaveChanges();
}

通过这种方式,EF Core 允许你灵活地处理并发更新,确保数据的一致性和完整性。 

三、需要了解的知识点

ConcurrencyCheckAttributeConvention 类 (Microsoft.EntityFrameworkCore.Metadata.Conventions) | Microsoft Learn

乐观并发:概述 - ADO.NET | Microsoft Learn 

Microsoft.EntityFrameworkCore 命名空间 | Microsoft Learn 

System.Windows.Controls 命名空间 | Microsoft Learn

六、源码地址

GitHub - HeBianGu/WPF-ControlDemo: 示例

GitHub - HeBianGu/WPF-ControlBase: Wpf封装的自定义控件资源库

GitHub - HeBianGu/WPF-Control: WPF轻量控件和皮肤库

七、了解更多

System.Windows.Controls 命名空间 | Microsoft Learn

https://github.com/HeBianGu

HeBianGu的个人空间-HeBianGu个人主页-哔哩哔哩视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/870905.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多平台支持,制作的电子画册随时随地都可以查看

​在数字化的时代背景下&#xff0c;电子画册以其便捷的传播方式、丰富的视觉表现形式&#xff0c;赢得了大众的喜爱。它不仅能够在个人电脑上展现&#xff0c;还能通过智能手机、平板电脑等多种移动设备随时随地被访问和浏览。这种跨平台的支持&#xff0c;使得无论你身处何地…

高精度定位与AI技术的深度融合——未来智慧世界的钥匙

引言在当今迅速发展的科技时代&#xff0c;精确定位和人工智能&#xff08;AI&#xff09;技术正在快速推动各领域的创新与变革。高精度定位结合AI技术所产生的融合效应&#xff0c;正在加速智慧城市、智能驾驶、智能物流以及许多其他领域的实现。这篇文章将详细探讨高精度定位…

基于Java技术的校园台球厅人员与设备管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot框架 工具&#xff1a;Eclipse、Navicat、Maven 系统展示 首页 用户注册界面 球桌信息…

C++基础编程100题-023 OpenJudge-1.4-03 奇偶数判断

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0104/03/ 描述 给定一个整数&#xff0c;判断该数是奇数还是偶数。 输入 输入仅一行&#xff0c;一个大于零的正整数n。 输出 输出仅一行&#xff0c;如果n是奇数&#xff0c;输出odd&#xff1b;如果n是偶…

Twelve Labs:专注视频理解,像人类一样理解视频内容

在当今数字化世界中&#xff0c;视频已成为人们获取信息和娱乐的主要方式之一。 AI视频生成领域的竞争也很激烈&#xff0c;Pika、Sora、Luma AI以及国内的可灵等&#xff0c;多模态、视频生成甚至也被视为大模型发展的某种必经之路。然而&#xff0c;与文本生成相比&#xff…

深入解析发生 OOM 的三大场景

深入解析 OOM 的三大场景 什么是 OOM&#xff1f;一、堆内存溢出 ( Heap OOM )原因分析解决方案 二、栈内存溢出&#xff08;Stack OOM&#xff09;原因分析解决方案 三、方法区内存溢出&#xff08;Metaspace OOM&#xff09;原因分析解决方案 在Java应用程序开发中&#xff0…

记录一次Nginx的使用过程

一、Docker安装配置nginx 1.拉取镜像 docker pull nginx2.创建挂载目录 启动前需要先创建Nginx外部挂载目录文件夹 主要有三个目录 conf&#xff1a;配置文件目录log&#xff1a;日志文件目录html&#xff1a;项目文件目录&#xff08;这里可以存放web文件&#xff09; 创建挂…

oslo_i18n学习小结

背景 代码均为开源代码 基于yoga版本&#xff0c;需要对openstack某服务做翻译&#xff0c;了解到oslo_i18n有翻译功能&#xff0c;配置oslo_i18n来给组件进行翻译 用法 用法 每个服务自己会带一个i18n.py的文件&#xff0c;如果要对日志进行翻译&#xff0c;从i18n导入_&…

逆变-TI视频课笔记

目录 1、全桥逆变 1.1、全桥逆变SPWM仿真 2、半桥逆变 2.1、本课小结 3、多重逆变&#xff08;间接的“交-直-交-直”变流&#xff09; 3.1、多电平逆变的目的 3.2、单逆变桥 3 电平控制时序 3.3、大功率设备的功率因数 3.4、本课小结 视频链接&#xff1a;文字…

Zed 编辑器发布了原生 Linux 版本

由 Rust 编写、GPU 加速的 Zed 文本编辑器终于提供了正式的 Linux 原生版本&#xff01;在过去的几个月里&#xff0c;Zed 的 Linux 支持取得了长足的进步&#xff0c;现在已经进入了更正式的阶段。 今天&#xff0c;这款由前 Atom 开发人员创建的现代开源代码编辑器现在在 Li…

vue vite+three在线编辑模型导入导出

文章目录 序一、1.0.0版本1.新增2.编辑3.导出4.导入 二、2.0.0版本1. 修复模型垂直方向放置时 模型会重合4. 修复了导出导入功能 现在是1:1导出导入5. 新增一个地面 视角看不到地下 设置了禁止编辑地面 地面设置为圆形6. 新增功能 可选择基本圆形 方形 圆柱形等模型以及可放置自…

网络 闲聊

闲谈 闲话 网络安全——>网络空间安全 网络空间&#xff1a;一个由信息基础设备组成互相依赖的网络 继&#xff1a;海、陆、空、天、的第五大空间 信息安全的一个发展&#xff1a; 通信保密阶段---计算机安全---信息系统安全---网络空间安全 棱镜门事件 棱镜计划&…

Java中的Set系列集合超详解

Set List是有序集合的根接口&#xff0c;Set是无序集合的根接口&#xff0c;无序也就意味着元素不重复。更严格地说&#xff0c;Set集合不包含一对元素e1和e2 &#xff0c;使得e1.equals(e2) &#xff0c;并且最多一个空元素。   使用Set存储的特点与List相反&#xff1a;元素…

腾讯云如何设置二级域名?

什么是二级域名&#xff1f; 例如我已申请的域名为&#xff1a; test.com //顶级域名 现在我开发的应用要部署到二级域名&#xff1a; blog.test.com 1、打开腾讯云控制台的我的域名&#xff0c;然后点击解析 2、在我的解析页面点击添加记录&#xff0c;然后需注意红色方框处…

生物素标记的柚皮苷探针;Biotin-Naringin

生物素标记的柚皮苷探针&#xff08;Biotin-Naringin&#xff09;是一种结合了生物素&#xff08;Biotin&#xff09;和柚皮苷&#xff08;Naringin&#xff09;特性的化合物&#xff0c;它在有机合成及药物化学技术领域具有重要意义。以下是对该探针的详细解析&#xff1a; 一…

秋招Java后端开发冲刺——Mybatis

一、基本知识 1. 介绍 MyBatis 是 Apache 的一个开源项目&#xff0c;它封装了 JDBC&#xff0c;使开发者只需要关注 SQL 语句本身&#xff0c;而不需要再进行繁琐的 JDBC 编码。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java POJO&#xff08;Plain …

Everything搜索无法搜索到桌面的文件(无法检索C盘 或 特定路径的文件)

现象描述 在Everything搜索框中输入桌面已存在的文件或随便已知位置的文件&#xff0c;无法找到。 搜索时检索结果中明显缺少部分磁盘位置的&#xff0c;例如无法检索C盘&#xff0c;任意关键字搜索时结果中没有位于C盘的&#xff0c;无论怎样都搜不到C盘文件。 解决方法 在…

图像识别和目标检测在超市电子秤上的应用

目录 前言深度学习的目标检测图像识别技术视觉秤的优势其他应用场景中的技术应用未来展望 前言 随着科技的不断发展&#xff0c;电子秤在生鲜超市中的应用也在不断升级。传统的电子秤需要打秤人员手动输入秤码&#xff0c;这不仅耗时费力&#xff0c;还需要大量的培训以记住各…

工业大数据是什么?应用工业大数据时面临哪些挑战?

在当今快速发展的工业领域&#xff0c;大数据已成为推动企业转型升级的核心动力。工业大数据&#xff0c;以其独特的价值和潜力&#xff0c;正逐渐改变着传统的生产、管理和决策模式。然而&#xff0c;伴随着大数据的快速发展&#xff0c;一系列挑战也随之浮现。本文将深入探讨…

算法日常练习

对于这个题&#xff0c;如何处理同一个方向的问题&#xff0c;且对于同一组的如果间隔太大如何实现离散化 #include<bits/stdc.h> using namespace std;#define int long long typedef long long ll; map<pair<int,int>,vector<pair<ll,ll>>> mp…