多个DbContext修改同一张表经测试是可行的。

UserStore和DepartmentStore都可以向SysLog表写入数据

用多个线程同时通过UserStore和DepartmentStore想SysLog表写入数据,数据能正确写入表中

实体代码:

public class Department{public String DeptId { get; set; }public String DeptName { get; set; }public String ParentId { get; set; }public DateTime? CreatedStamp { get; set; }public DateTime? UpdatedStamp { get; set; }}public class SysLog{public SysLog() { Id = Guid.NewGuid().ToString(); }/// <summary>/// Id/// </summary>public String Id { get; set; }/// <summary>/// 参数/// </summary>public String Operator { get; set; }/// <summary>/// 信息/// </summary>public String Message { get; set; }/// <summary>/// 结果/// </summary>public String Result { get; set; }/// <summary>/// 类型/// </summary>public String Type { get; set; }/// <summary>/// 模组/// </summary>public String Module { get; set; }/// <summary>/// 创建时间/// </summary>public DateTime CreateTime { get; set; }}public class User{public String Uid { get; set; }public String Passwrod { get; set; }public String Name { get; set; }public String QQ { get; set; }public String Email { get; set; }public String Tel { get; set; }public String MobilePhone { get; set; }public String DeptId { get; set; }public DateTime? CreatedStamp { get; set; }public DateTime? UpdatedStamp { get; set; }}

数据库映射

public class DepartmentMapping: EntityTypeConfiguration<Department>{public DepartmentMapping(){ToTable("Department");HasKey(t => t.DeptId);Property(t => t.DeptId).HasColumnName("DeptId").HasColumnType("varchar").HasMaxLength(50);Property(t => t.DeptName).HasColumnName("DeptName");Property(t => t.ParentId).HasColumnName("ParentId");Property(t => t.CreatedStamp).HasColumnName("CreatedStamp");Property(t => t.UpdatedStamp).HasColumnName("UpdatedStamp");}}public class SysLogMapping:EntityTypeConfiguration<SysLog>{public SysLogMapping(){ToTable("SysLog");HasKey(t => t.Id);Property(t => t.Id).HasColumnName("Id").HasColumnType("varchar");Property(t => t.CreateTime).HasColumnName("CreateTime");Property(t => t.Message).HasColumnName("Message");Property(t => t.Module).HasColumnName("Module");Property(t=>t.Operator).HasColumnName("Operator");Property(t => t.Result).HasColumnName("Result");Property(t => t.Type).HasColumnName("Type");}}public class UsersMapping : EntityTypeConfiguration<User>{public UsersMapping(){this.ToTable("Users");this.HasKey(t => t.Uid);/// <summary>/// Uid/// </summary>this.Property(t => t.Uid).HasMaxLength(50).HasColumnName("Uid");Property(t => t.Name).HasMaxLength(50).HasColumnName("Name");Property(t => t.DeptId).HasMaxLength(50).HasColumnName("DeptId");Property(t => t.Email).HasMaxLength(50).HasColumnName("Email");Property(t => t.MobilePhone).HasMaxLength(50).HasColumnName("MobilePhone");Property(t => t.Passwrod).HasMaxLength(50).HasColumnName("Passwrod");Property(t => t.QQ).HasMaxLength(50).HasColumnName("QQ");Property(t => t.Tel).HasMaxLength(50).HasColumnName("Tel");Property(t => t.CreatedStamp).HasColumnName("CreatedStamp");Property(t => t.UpdatedStamp).HasColumnName("UpdatedStamp");}}

数据库上下文

public class DepartmentStore : DbContext{public DepartmentStore(string nameOrConnectionString) : base(nameOrConnectionString) { }public DbSet<Department> Departments { get; set; }public DbSet<SysLog> SysLog { get; set; }public void AddDepartment(Department department){Departments.Add(department);}public Department GetDepartment(String DeptId){return Departments.FirstOrDefault(p => p.DeptId.Equals(DeptId));}public Boolean RemoveDepartment(Department department){return RemoveDepartment(department.DeptId);}public Boolean RemoveDepartment(String DeptId){var department = GetDepartment(DeptId);if (department == null) return false;Departments.Remove(department);return true;}public void AddLog(SysLog log){SysLog.Add(log);}protected override void OnModelCreating(DbModelBuilder modelBuilder){modelBuilder.Configurations.Add(new Mapping.DepartmentMapping());modelBuilder.Configurations.Add(new Mapping.SysLogMapping());}}public class UserStore:DbContext{public UserStore(string nameOrConnectionString) : base(nameOrConnectionString) { }public DbSet<User> Users { get; set; }public DbSet<SysLog> SysLog { get; set; }public void AddUsers(User user){Users.Add(user);}public User GetUser(String Uid){return Users.FirstOrDefault(p => p.Uid.Equals(Uid));}public Boolean Remove(User user){return Remove(user.Uid);}public Boolean Remove(String Uid){var user = GetUser(Uid);if (user == null)return false;Users.Remove(user);return true;}public void AddLog(SysLog log){SysLog.Add(log);}protected override void OnModelCreating(DbModelBuilder modelBuilder){modelBuilder.Configurations.Add(new Mapping.UsersMapping());modelBuilder.Configurations.Add(new Mapping.SysLogMapping());}}

业务操作

public class DepartmentService : IDisposable{DepartmentStore store = null;public DepartmentService(String nameOrConnectionString){store = new DepartmentStore(nameOrConnectionString);}public Boolean AddDepartement(Department dept){//using (var store = new UserStore(_nameOrConnectionString))//{using (DbContextTransaction transaction = store.Database.BeginTransaction()){store.AddDepartment(dept);store.AddLog(new SysLog{CreateTime = dept.CreatedStamp.Value,Message = String.Format("添加部门【{0}】,名称【{1}】", dept.DeptId,dept.DeptName),Module = "Department",Result = "true",Type = "Department"});Boolean result = store.SaveChanges() > 0;store.SaveChanges();transaction.Commit();return result;}//}
        }public Boolean UpdateDepartment(Department newDept){//using (var store = new UserStore(_nameOrConnectionString))//{var dept = store.GetDepartment(newDept.DeptId);using (DbContextTransaction transaction = store.Database.BeginTransaction()){dept.DeptName = newDept.DeptName;dept.ParentId = newDept.ParentId;dept.UpdatedStamp = newDept.UpdatedStamp;store.AddLog(new SysLog{CreateTime = newDept.UpdatedStamp.Value,Message = String.Format("更新部门【{0}】,名称【{1}】", dept.DeptId, dept.DeptName),Module = "Department",Result = "true",Type = "Department"});Boolean result = store.SaveChanges() > 0;store.SaveChanges();transaction.Commit();return result;}//}
        }public Boolean DeleteDepartment(String deptId){using (DbContextTransaction transaction = store.Database.BeginTransaction()){if (store.RemoveDepartment(deptId)){store.AddLog(new SysLog{CreateTime = DateTime.Now,Message = String.Format("删除部门【{0}】", deptId),Module = "Department",Result = "true",Type = "String"});}Boolean result = store.SaveChanges() > 0;store.SaveChanges();transaction.Commit();return result;}}public void Dispose(){store.Dispose();GC.ReRegisterForFinalize(this);}}String _nameOrConnectionString = String.Empty;UserStore store = null;public UserService(String nameOrConnectionString){store = new UserStore(nameOrConnectionString);_nameOrConnectionString = nameOrConnectionString;}public Boolean AddUser(User user){//using (var store = new UserStore(_nameOrConnectionString))//{using (DbContextTransaction transaction = store.Database.BeginTransaction()){store.AddUsers(user);store.AddLog(new SysLog{CreateTime = user.CreatedStamp.Value,Message = String.Format("添加用户【{0}】名称【{1}】", user.Uid, user.Name),Module = "User",Result = "true",Type = "User"});Boolean result = store.SaveChanges() > 0;store.SaveChanges();transaction.Commit();return result;}//}
        }public Boolean UpdateUser(User newUser){//using (var store = new UserStore(_nameOrConnectionString))//{var user = store.GetUser(newUser.Uid);using (DbContextTransaction transaction = store.Database.BeginTransaction()){user.Name = newUser.Name;user.MobilePhone = newUser.MobilePhone;user.Passwrod = newUser.Passwrod;user.QQ = newUser.QQ;user.Tel = newUser.Tel;user.UpdatedStamp = newUser.UpdatedStamp;store.AddLog(new SysLog{CreateTime = newUser.UpdatedStamp.Value,Message = String.Format("更新用户【{0}】名称【{1}】", user.Uid, user.Name),Module = "User",Result = "true",Type = "User"});Boolean result = store.SaveChanges() > 0;store.SaveChanges();transaction.Commit();return result;}//}
        }public Boolean DeleteUser(String uid){using (DbContextTransaction transaction = store.Database.BeginTransaction()){if (store.Remove(uid)){store.AddLog(new SysLog{CreateTime = DateTime.Now,Message = String.Format("删除用户【{0}】", uid),Module = "User",Result = "true",Type = "String"});}Boolean result = store.SaveChanges() > 0;store.SaveChanges();transaction.Commit();return result;}}public void Dispose(){store.Dispose();GC.ReRegisterForFinalize(this);}}

测试

    public class TestEntityFramework{const String connectionString = "data source=.;initial catalog=DataBaseName;user id=UID;password=Pwd;";public TestEntityFramework(){var task1 = Task.Factory.StartNew(() =>{UserService userService = new UserService(connectionString);userService.DeleteUser("TestUser1");userService.AddUser(new EntityFramework.Model.User{Uid = "TestUser1",DeptId = "Detpid1",Email = "Email@Test.com",MobilePhone = "13429870975",Name = "TestUserName1",Passwrod = "21332432",QQ = "36592369562",Tel = "0755-75935275",CreatedStamp = DateTime.Now});userService.Dispose();});
            var task2 = Task.Factory.StartNew(() =>{DepartmentService service = new DepartmentService(connectionString);service.DeleteDepartment("Detpid1");service.AddDepartement(new EntityFramework.Model.Department{DeptId = "Detpid1",DeptName = "DeptName1",ParentId = String.Empty,CreatedStamp = DateTime.Now});service.Dispose();});Task.WaitAll(task1, task2);}public void Test(){List<Task> list = new List<Task>();int i = 1;do{var task = Task.Factory.StartNew((index) =>{UserService userService = new UserService(connectionString);userService.UpdateUser(new EntityFramework.Model.User{Uid = "TestUser1",DeptId = "Detpid1" + index.ToString(),Email = "Email@Test.com" + index.ToString(),MobilePhone = "13429870975" + index.ToString(),Name = "TestUserName1" + index.ToString(),Passwrod = "21332432" + index.ToString(),QQ = "36592369562" + index.ToString(),Tel = "0755-75935275" + index.ToString(),UpdatedStamp = DateTime.Now});userService.Dispose();}, i);list.Add(task);} while (i++ < 10);i = 1;do{var task = Task.Factory.StartNew((index) =>{DepartmentService service = new DepartmentService(connectionString);service.UpdateDepartment(new EntityFramework.Model.Department{DeptId = "Detpid1",DeptName = "DeptName1" + index.ToString(),ParentId = String.Empty,UpdatedStamp = DateTime.Now});service.Dispose();}, i);list.Add(task);} while (i++ < 10);Task.WaitAll(list.ToArray());}}

转载于:https://www.cnblogs.com/shipengfei/p/8574422.html

多个DbContext修改同一张表测试相关推荐

  1. php删除一张表数据的时候 把另一张表的数据也删除,剔除第一张表的数据时,修改第二张表的相关字段的数值...

    删除第一张表的数据时,修改第二张表的相关字段的数值 表xf xf_id vip total 1 1 10 2 1 100 3 2 80 4 3 50 表vip vip jifen 1 1000 2 5 ...

  2. oracle:一个update修改两张表

    需求:用一个update语句修改两张表? 思路:用触发器来解决 触发器代码: 表a:table_a,表b:table_b,其中表b里面有表a的id,这个触发器意思是当修改表a的最后修改人:table_ ...

  3. Oracle修改一张表中某个字段 不为空改为可为空

    修改一张表中某个字段 不为空改为可为空 例子:alter table tableName modify 字段 null; 但是反过来把可为空改为不为空就有问题.有知道的大神可以指教一下.多谢

  4. oracle批量修改多张表的数据,Oracle批量修改用户表table的表空间

    一.修改用户表table的表空间 1.修改用户表table的表空间:alter table 表名 move tablespace 新表空间名; 2.查询所有用户表:select * from user ...

  5. 修改同一张表的同一个字段的两个不同的值。

    2019独角兽企业重金招聘Python工程师标准>>> 1.   数据表结构 2.  问题描述           id='20151210144525'的用户Balance减少10 ...

  6. oracle触发器修改同一张表,oracle触发器中对同一张表进行更新再查询时,需加自制事务...

    CREATE OR REPLACE TRIGGER Trg_ReimFact BEFORE UPDATE ON BP_Order FOR EACH ROW DECLARE PRAGMA AUTONOM ...

  7. mysql两张表关联修改

    mysql两张表关联修改 两张表的字段code是相同的,然后code作为关联参数来关联两表,将user2 中的name写入到user1 的name中,三表,四表,多表都是一个道理 UPDATE use ...

  8. matlab可以对多张表同时操作吗,update操作多张表

    sql 语句多张表UPDATE用法 一.当用一个表中的数据来更新另一个表中的数据,T-SQL提供多种写法(下面列出了二种),但建议用第一种写法,虽然传统,但结构清晰.飞.飞Asp技术乐园 并且要注意, ...

  9. 记Mysql同时查询更新同一张表的操作

    直接查询修改同一张表会报错,这里换个思路,想办法变成是对两张表进行操作就能解决问题啦! UPDATE test SET IState=11 WHERE Id in (SELECT Id FROM (S ...

  10. Java连接HBASE数据库,创建一个表,删除一张表,修改表,输出插入,修改,数据删除,数据获取,显示表信息,过滤查询,分页查询,地理hash

    准备工作 1.创建Java的Maven项目 创建好的目录结构如下: 另外注意junit的版本,最好不要太高,最开始笔者使用的junit4.12的,发现运行的时候会报错.最后把Junit的版本改成4.7 ...

最新文章

  1. 打开方式中选择默认方式无反映_Win7系统无法选择打开方式的解决方法
  2. java 页面 分离 实现_JavaBean实现JSP页面和代码分离
  3. jdk动态代理实例和cglib动态代理实例_CGLib 动态代理 原理解析
  4. java word表格_Java 添加Word表格行或列
  5. python编程入门经典教程-python编程入门经典
  6. oracle导出脚本文件怎么打开,Windows下的Oracle导出脚本 -电脑资料
  7. java中content啥意思_JSTL标签中的body-content标签体内容输出格式的介绍
  8. 题解 P2598 【[ZJOI2009]狼和羊的故事】
  9. leetcode 278. 第一个错误的版本(二分)
  10. absolute元素在text-align属性下的对齐显示
  11. 学习C语言必须知道的理论知识(第三章-C语句)
  12. python怎么用numpy_Python:一篇文章掌握Numpy的基本用法
  13. ie浏览器修复_微软IE浏览器曝零日漏洞:一个老文件格式,可致系统文件遭窃...
  14. 单片机ISP烧录原理
  15. adb 环境变量配置 无效
  16. 吐纳六字气法的形成与发展
  17. 《论文阅读》PV-RCNN: Point-Voxel Feature Set Abstraction for 3D Object Detection
  18. eclipse-svn插件
  19. am335x开发板的疑问以及解答
  20. 【免费毕设】JSP旅游网站建设设计与实现(源代码+论文)

热门文章

  1. c语言无符号扩展,C语言中的无符号扩展和带符号扩展
  2. java集合-TreeSet排序方式
  3. Linux chapter test 9
  4. MYSQL 存储过程和函数 案例 例子
  5. 阶段3 1.Mybatis_11.Mybatis的缓存_6 Mybatis中的一级缓存
  6. Centos7忘记mysql的root用户密码
  7. JDK8下maven使用maven-javadoc-plugin插件报错
  8. 配置vue,vue脚手架的应用(老版本)
  9. 异常为当IDENTITY_INSERT设置为OFF时 解决办法
  10. 基本数据类型-列表_元组_字典