[高并发]EntityFramework之高性能扩展
目录
简介
本EF扩展插件将持续更新:开源,敏捷,高性能。(由于EF Core暂未提供方便的钩子位置,暂无EF Core版本)
EntityFramework.Extension代码 (GitHub欢迎Fork)
EntityFramework.Extension代码 (Nuget:Install-Package EntityFramework.Extension)
读写分离
读写分离,支持可配置项的方式。同时支持权重的方式轮询。
- 先看段配置文件
<entityFrameworkConfig isSlaveRead="true" readConnstr="Data Source=(localdb)\test;Initial Catalog=Demo;Integrated Security=True;">
<slaves>
<add name="test1" connectionString="Data Source=(localdb)\test;Initial Catalog=Demo;Integrated Security=True;" weight="1"/>
<add name="test2" connectionString="Data Source=(localdb)\test;Initial Catalog=Demo;Integrated Security=True;" weight="10"/>
</slaves>
</entityFrameworkConfig>
isSlaveRead// 是否开启读写分离readConnstr// 读库链接字符串slaves节点// 当读库有多个时,通过weight支持权重轮询读库功能。(readConnstr配置不为空时,将忽略slaves节点)
指定字段更新
目前封装了3种形式的,指定字段更新方法。
- 对象不存在上下文
var user = new User { Id = 2, Name = Guid.NewGuid().ToString() };
DemoDbContext.CurrentDb.UpdateField(user, "Name");
- 对象已存在上下文
var user = new User { Id = 2, Name = Guid.NewGuid().ToString() };
DemoDbContext.CurrentDb.UpdateField(user, x => x.Id == 2, "Name");
- 对象为IEntity,无论是否存在上下文均支持
var user = new User { Id = 2, Name = Guid.NewGuid().ToString() };
DemoDbContext.CurrentDb.UpdateEntityField(user, "Name");
事务
事务类型
在.NET 中,事务分SQLTransaction和TransactionScope。后者在MSDTC(Distributed Transaction Coordinator)开启的时候,支持分布式事务。- TransactionScopeOption
- Required
- 默认方式,如果存在环境事务,直接取环境事务,如果不存在,则创建新的
- RequiresNew
- 直接创建新的环境事务
- Suppress
- 取消当前区域环境事务
- Required
- TransactionScopeOption
隔离等级IsolationLevel
- ReadUncommitted(读未提交)
- 表示:未提交读。当事务A更新某条数据的时候,不容许其他事务来更新该数据,但可以进行读取操作
- ReadCommitted(读提交)
- 表示:提交读。当事务A更新数据时,不容许其他事务进行任何的操作包括读取,但事务A读取时,其他事务可以进行读取、更新
- RepeatableRead
- 表示:重复读。当事务A更新数据时,不容许其他事务进行任何的操作,但是当事务A进行读取的时候,其他事务只能读取,不能更新
- Serializable
- 表示:序列化。最严格的隔离级别,当然并发性也是最差的,事务必须依次进行。
- 默认级别
- Oracle read committed
- SqlServer read committed
- MySQL(InnoDB) Read-Repeatable
- ReadUncommitted(读未提交)
事务特性(ACID)
- 原子性(Atomicity)
- 事务是数据库的逻辑工作单位,事务中的诸多操作要么全做要么全不做
- 一致性(Consistency)
- 事务执行结果必须是使数据库从一个一致性状态变到另一个一致性状态
- 隔离性(Isolation)
- 一个数据的执行不能被其他事务干扰
- 持续性/永久性(Durability)
- 一个事务一旦提交,它对数据库中的数据改变是永久性的
- 原子性(Atomicity)
说了那么多,本插件对事务的支持:
DemoDbContext.CurrentDb.TransExecute(x => {
x.Users.Add(new User());
return x.SaveChanges();
});
针对事务,同时支持锁的读取功能
var userList = DemoDbContext.CurrentDb.NoLockFunc(db => db.Users.ToList());
Entity
类似ABP框架,提供了IEntity,ICreatorEntity,IModifyEntity,IAuditionEntity,IDeletionEntity等等
[高并发]EntityFramework之高性能扩展的更多相关文章
- 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...
- EntityFramework Core高并发深挖详解,一纸长文,你准备好了吗?
前言 之前有关EF并发探讨过几次,但是呢,博主感觉还是有问题,为什么会觉得有问题,其实就是理解不够透彻罢了,于是在项目中都是用的存储过程或者SQL语句来实现,利用放假时间好好补补EF Core并发的问 ...
- 15套java架构师、集群、高可用、高可扩 展、高性能、高并发、性能优化Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...
- 高级java高并发,高性能,分布式,高可用,负载均衡,系统架构实战
java架构师.集群.高可用.高可扩 展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布 式项目实战 视频课程包含: ...
- PHP秒杀系统-高并发高性能的极致挑战
慕课网实战教程后端:1.java c++算法与数据结构2.java Spring Boot带前后端 渐进式开发企业级博客系统3.java Spring Boot企业微信点餐系统4.java Sprin ...
- Java异步NIO框架Netty实现高性能高并发
原文地址:http://blog.csdn.net/opengl_es/article/details/40979371?utm_source=tuicool&utm_medium=refer ...
- Java与Netty实现高性能高并发
摘要: 1. 背景 1.1. 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程 ...
- 浅谈千万级PV/IP规模高性能高并发网站架构(转自老男孩)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/736710 如果把来 ...
- 浅谈千万级PV/IP规模高性能高并发网站架构
高并发访问的核心原则其实就一句话“把所有的用户访问请求都尽量往前推”. 如果把来访用户比作来犯的"敌人",我们一定要把他们挡在800里地以外,即不能让他们的请求一下打到我们的指挥部 ...
随机推荐
- 学java网络编程的心得体会
网络编程简单思路 一.发送端1创建udp服务,通过DatagramSocket对象;2确定数据,封装成包DatagramPacket(byte[] buf, int length, InetAddre ...
- Linux parent process and child process when 'sudo'
如果在一般用户下如user,执行sudo命令,会产生两个进程. ps -ef | grep Container root 4305 643 0 16:37 pts/39 00:00:00 sudo . ...
- Ultimus BPM 通信和运营商行业应用解决方案
Ultimus BPM 通信和运营商行业应用解决方案 行业应用需求 电信运营商的主要职能是维护庞大的通信网络和向电信用户提供固话通讯.手机通讯.数据通讯及相关的附加增值服务,其组织特点是工种多.分工细 ...
- 创建发布自己的npm包
我们基于nodejs平台上面的npm上,可以随意下载很多npm安装包.那我们如何创建自己的npm包呢?很简单,废话少说,开始做~ 开始做之前nodejs默认是要安装的,怎么安装自行百度其他教程. 首先 ...
- 【shell脚本实例】shell脚本统计单词频率、出现次数最多的n个单词
1. 统计的对象words.txt,每个单词占一行(从简考虑了~) zjd@ubuntu:~/test$ cat word.txt used this count mysql count this u ...
- 矢量量化(VQ)
作者:桂. 时间:2017-05-31 21:14:56 链接:http://www.cnblogs.com/xingshansi/p/6925955.html 前言 VQ(Vector Quant ...
- 部署项目到weblogic时提示文件被锁,导致报错
部署项目到weblogic中出现一个“黄叹号!”.报错如下: (1) Deployment is out of date due to changes in the underlying projec ...
- php curl_setopt的相关设置查询手册
bool curl_setopt (int ch, string option, mixed value) curl_setopt()函数将为一个CURL会话设置选项.option参数是你想要的设置, ...
- [HDU1000] A + B Problem
Problem Description Calculate A + B. Input Each line will contain two integers A and B. Process to e ...
- DOM知识梳理
DOM 我们知道,JavaScript是由ECMAScript + DOM + BOM组成的.ECMAScript是JS中的一些语法,而BOM主要是浏览器对象(window)对象的一些相关知识的集合. ...