/// <summary> /// 算法:根据组合产品的ProductID和其子产品的ChildrenProductID唯一确定一条记录,删除再插入。删除插入一并做,会大大简化程序和客户端的各种判断。 /// CreateDate: 2013年11月19日11:43:22 /// </summary> /// <param name="rModel"></param> /// <param name="User_Account"></param> /// <returns>如果新增成功,返回新的ID</returns> public long AddNewHM4Group(CMS_HMGroup_Relation_Model rModel, String User_Account) { using (PermaisuriCMSEntities db = new PermaisuriCMSEntities()) { //这种方法如果表结构改动,会大大增加维护成本。根据实际情况,可能组合产品的新增操作不是很频繁,并不会很大程度上影响性能,所以还是用EF来做 //using (TransactionScope transaction = new TransactionScope()) //{ // //db.Database.ExecuteSqlCommand("delete from CMS_HMGroup_Relation where ProductID = @ProductID and ChildrenProductID", new SqlParameter("@ProductID", rModel.ProductID)); //} //if (rModel.RID > 0)//说明是在原有的基础上编辑而不是新增,直接删除了吧...2013年11月20日14:42:23 //{ // var relation = new CMS_HMGroup_Relation { RID = rModel.RID }; // db.Set<CMS_HMGroup_Relation>().Attach(relation); // db.CMS_HMGroup_Relation.Remove(relation); //} //var query = db.CMS_HMGroup_Relation.Where(r => r.ProductID == rModel.ProductID && r.ChildrenProductID == rModel.ChildrenProductID).FirstOrDefault(); //if (query != null) //{ // //db.Set<CMS_HMGroup_Relation>().Attach(query); // db.CMS_HMGroup_Relation.Remove(query); //} //var rel = db.CMS_HMGroup_Relation.FirstOrDefault(r => r.RID == rModel.RID); /*使用RID来做判断,在2014年4月28日 下发生产环境的时候遇到很多问题,最典型的一个就是前端使用复制HMNUM, * 然后选择下拉单,然后离开鼠标,客户端触发了2次RID为0的AJAX数据,造成该条数据重复插入两次。经过调试发现,ProductID是可以当成一个KEY读取,比如一个组合产品的ProductID * 只会有一个,即使下一次再Create一个同样名称的组合产品,由于库表是自动增长的ID,所以名称一样没关系,ID不一样 2014年4月29日9:26:55 */ var rel = db.CMS_HMGroup_Relation.FirstOrDefault(r => r.ProductID == rModel.ProductID && r.ChildrenProductID == rModel.ChildrenProductID); if (rel == null) { var newModel = new CMS_HMGroup_Relation { ProductID = rModel.ProductID, ChildrenProductID = rModel.ChildrenProductID, SellSets = rModel.SellSets, CreateBy = User_Account, CreateOn = DateTime.Now }; db.CMS_HMGroup_Relation.Add(newModel); db.SaveChanges(); return(newModel.RID); } else { rel.ProductID = rModel.ProductID; rel.SellSets = rModel.SellSets; rel.ChildrenProductID = rModel.ChildrenProductID; db.SaveChanges(); return(rel.RID); } } }
/// <summary> /// 插入基础产品的HMNUM /// </summary> /// <param name="db"></param> /// <param name="groupProductID">组合产品的ID</param> /// <param name="newHMCost"></param> /// <param name="newHM"></param> /// <param name="newCTN"></param> /// <param name="newDim"></param> /// <param name="SellSets">...</param> public void InsertBasicHM(PermaisuriCMSEntities db, long groupProductID, CMS_HM_Costing newHMCost, CMS_HMNUM newHM, CMS_ProductCTN newCTN, CMS_ProductDimension newDim, int SellSets) { //先判断是否存在这个基础HMNUM long basicProductID = 0; var isExistHM = db.CMS_HMNUM.FirstOrDefault(h => h.HMNUM == newHM.HMNUM); if (isExistHM == null) { db.CMS_HM_Costing.Add(newHMCost); long newHMCostID = newHMCost.HMCostID; newHM.HMCostID = newHMCostID; db.CMS_HMNUM.Add(newHM); db.SaveChanges(); basicProductID = newHM.ProductID; newHMCost.HisProductID = newHM.ProductID; //尺寸箱柜 newCTN.ProductID = basicProductID; newDim.ProductID = basicProductID; db.CMS_ProductCTN.Add(newCTN); db.CMS_ProductDimension.Add(newDim); } else { OnOperateNotify(this, new HMEventArgs(String.Format("CMS_HMNUM(基础数据)表已经存在HMNUM={0}的数据,忽略过不插入", newHM.HMNUM))); HMLog.Info(String.Format("CMS_HMNUM(基础数据)表已经存在HMNUM={0}的数据,忽略过不插入", newHM.HMNUM)); basicProductID = isExistHM.ProductID; } var newRelation = db.CMS_HMGroup_Relation.FirstOrDefault(r => r.ProductID == groupProductID && r.ChildrenProductID == basicProductID); if (newRelation == null) { //组合产品--基础产品--的关系表 var newRel = new CMS_HMGroup_Relation { ChildrenProductID = basicProductID, ProductID = groupProductID, SellSets = SellSets, CreateBy = UpdateBy, CreateOn = DateTime.Now }; db.CMS_HMGroup_Relation.Add(newRel); } else { OnOperateNotify(this, new HMEventArgs(String.Format("CMS_HMGroup_Relation表已经存在ProductID={0},ChildrenProductID={1}的数据,忽略过不插入", groupProductID, basicProductID))); HMLog.Info(String.Format("CMS_HMGroup_Relation表已经存在ProductID={0},ChildrenProductID={1}的数据,忽略过不插入", groupProductID, basicProductID)); } db.SaveChanges(); }