linq 批量删除,添加数据 || 附带回滚 || 表双主键

        public void DelandAddEmployeeRole(string strEmpNo,List<Model.EmployeeRole> listEmployeeRoles) {
            using (var transaction = this.Database.BeginTransaction())
            {
                //删除旧数据
                var query = EmployeeRoles.Where(s => s.EmpNo == strEmpNo);
                EmployeeRoles.RemoveRange(query.ToList());
                SaveChanges();
                // 添加新记录
                foreach (Model.EmployeeRole ModelEmployeeRole in listEmployeeRoles)
                {
                    EmployeeRole employeeRole = new EmployeeRole()
                    {
                        EmpNo = ModelEmployeeRole.EmpNo,
                        Role = ModelEmployeeRole.Role,
                        Parameter = ModelEmployeeRole.Parameter
                    };
                    EmployeeRoles.Add(employeeRole);
                }
                SaveChanges();

                
                transaction.Commit();
            }

            //using (TransactionScope transaction = new TransactionScope())
            //{
            //    transaction.Complete();
            //}
        }

------------------添加数据遇到该表双主键,在实体类设置----------------------------

同时注意方法里设定过双主键后,不要再设定key了

    [Table("RoleAndResourceGroup")]
    public class RoleAndResourceGroup
    {
        public static void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<RoleAndResourceGroup>().HasKey(c=>new { c.RoleName,c.ResourceGroupName});
        }
        /// <summary>
        /// RoleName
        /// </summary>
        public string RoleName { get; set; }
        /// <summary>
        /// ResourceGroupName
        /// </summary>	
        public string ResourceGroupName { get; set; }

    }

在context类里加个方法

protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.HasDefaultSchema("Permission");//设置了数据库表的前缀名/模块名
            RoleAndResourceGroup.OnModelCreating(modelBuilder);//主要是这句
        }
        public virtual DbSet<RoleAndResourceGroup> RoleAndResourceGroups { get; set; }   //角色和资源组关系 
然后就可以啦



发布了53 篇原创文章 · 获赞 32 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/niuniuyaobuyao/article/details/80099519