赞
踩
public class Main {
public static void main(String[] args) {
Integer i = 10;
int n = i;
}
}
var query=(from a in db.TableA
join b in db.TableB
on a.ID equals b.NodeID into c
from x in c.DefaultIfEmpty()
where a.ID==param
select new
{
a,
x.Key
}).FirstOrDefault();
var GJoinList = db.Sys_User.GroupJoin(db.Sys_Department, u => u.DepartmentId, d => d.DepartmentId, (u,d) => new { UserId=u.UserId, Account=u.Account, RealName=u.RealName, EnabledMark=u.EnabledMark, DeleteMark=u.DeleteMark,DepartmentName = d.FirstOrDefault(x=>x.DepartmentId==u.DepartmentId).FullName}).Select(o=>o);
public class MyAction :Attribute,IActionFilter
{
public void OnActionExecuted(ActionExecutedContext context)
{
var controllerName = context.RouteData.Values["controller"];
var actionName = context.RouteData.Values["action"];
Console.WriteLine($"行为过滤器OnActionExecuted作用于{controllerName }控制器下的{actionName }方法运行之后</br>", Encoding.Default);
}
public void OnActionExecuting(ActionExecutingContext context)
{
var controllerName = context.RouteData.Values["controller"];
var actionName = context.RouteData.Values["action"];
Console.WriteLine($"行为过滤器OnActionExecuting作用于{controllerName }控制器下的{actionName }方法运行之前</br>", Encoding.UTF8);
}
}
// .NET Core3.1默认代码
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
// 中间件
app.UseDeveloperExceptionPage();
}
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
app.Use(async (context, next) =>
{
await context.Response.WriteAsync("Hello 1 开始");
await next();//调用下一个中间件
await context.Response.WriteAsync("Hello 1 结束");
});
app.Use(async (context, next) =>
{
await context.Response.WriteAsync("Hello 2 开始");
await next();
});
public class CustomMiddleWare
{
private readonly RequestDelegate _next;
//依赖注入
public CustomMiddleWare(RequestDelegate next)
{
this._next = next;
}
public async Task Invoke(HttpContext context)
{
await context.Response.WriteAsync($"{nameof(CustomMiddleWare)},Hello World1!<br/>");
await _next(context);
await context.Response.WriteAsync($"{nameof(CustomMiddleWare)},Hello World2!<br/>");
}
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseMiddleware<CustomMiddleWare>();
}
public static class MiddleExtend
{
public static IApplicationBuilder UseCustomMiddleWare(this IApplicationBuilder builder)
{
return builder.UseMiddleware<CustomMiddleWare>();
}
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseCustomMiddleWare();
}
小明的工资是20000,人事在输入工资的时候多打了个0,但是还没有提交,此时小明会查到自己的工资变成了20000
程序员拿着信用卡去享受生活(卡里当然是只有3.6万),当他埋单时(程序员事务开启),收费系统事先检测到他的卡里有3.6万,就在这个时候!!程序员的妻子要把钱全部转出充当家用,并提交。当收费系统准备扣款时,再检测卡里的金额,发现已经没钱了(第二次检测金额当然要等待妻子转出金额事务提交完)。程序员就会很郁闷,明明卡里是有钱的
问题:解决了脏读问题,但是会出现不可重复读问题,即:出现了一个事务范围内两个相同的查询却返回了不同数据,这就是不可重复读。
程序员拿着信用卡去享受生活(卡里当然是只有3.6万),当他埋单时(事务开启,不允许其他事务的UPDATE修改操作),收费系统事先检测到他的卡里有3.6万。这个时候他的妻子不能转出金额了。接下来收费系统就可以扣款了。
分析:重复读可以解决不可重复读问题。写到这里,应该明白的一点就是,**不可重复读对应的是修改,即UPDATE操作。**但是可能还会有幻读问题。因为幻读问题对应的是插入INSERT操作,而不是UPDATE操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。