/// <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();
        }