using EFCoreConcurrencyDemo.DbModel.ConcurrencyCheckDemo; using EFCoreConcurrencyDemo.DbModel.RowVersionDemo; using EFCoreConcurrencyDemo.DbModelConfiguration; using Microsoft.EntityFrameworkCore;
namespaceEFCoreConcurrencyDemo.DbContext { public class MyDbContext:Microsoft.EntityFrameworkCore.DbContext { publicMyDbContext(DbContextOptions<MyDbContext> options):base(options) { }
public DbSet<ConcurrencyCheckDemo> ConcurrencyCheckDemos { get; set; }
public DbSet<RowVersionDemo> RowVersionDemos { get; set; }
using System.Threading.Tasks; using EFCoreConcurrencyDemo.DbContext; using EFCoreConcurrencyDemo.DbModel.ConcurrencyCheckDemo; using EFCoreConcurrencyDemo.DbModel.RowVersionDemo; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore;
publicasync Task<int> SeedData() { var concurrencyCheckDemo = new ConcurrencyCheckDemo() { Name = "ConcurrencyCheck测试", Age = 20 }; await _dbContext.ConcurrencyCheckDemos.AddAsync(concurrencyCheckDemo);
var rowVersionDemo = new RowVersionDemo() { Name = "RowVersion测试", Age = 24 }; await _dbContext.RowVersionDemos.AddAsync(rowVersionDemo); var changedRow = await _dbContext.SaveChangesAsync(); return changedRow; }
publicasync Task<int> ConcurrencyCheck() { var dbValue = await _dbContext.ConcurrencyCheckDemos.FirstOrDefaultAsync(); //dbValue.Name = "ConcurrencyCheck New Value"; dbValue.Age = 29; var changedRow = await _dbContext.SaveChangesAsync(); return changedRow; }
publicasync Task<int> RowVersionCheck() { var dbValue = await _dbContext.RowVersionDemos.FirstOrDefaultAsync(); //dbValue.Name = "RowVersion New Value"; dbValue.Age = 36; var changedRow = await _dbContext.SaveChangesAsync(); return changedRow; } } }
迁移数据库
在Visual Studio 2019中的程序包管理控制台中输入以下命令:
1
add-migration InitDemoDb
得到迁移记录之后,用以下命令生成数据库脚本,去Microsoft SQL Server Management Studio中执行即可,或者你可以用EFCore中的update命令直接迁移
1
script-migration
测试
这里提供测试思路,将项目运行起来,先访问/demo/SeedData往数据库写入两条测试数据
分别测试/demo/ConcurrencyCheck和/demo/RowVersionCheck,在赋值的那行代码打断点,取得数据之后,自己在Microsoft SQL Server Management Studio中手动修改数据,然后继续运行代码,则可以看出效果