//public int Delete(string FunctionID)
        //{
        //    using (var db = new BCBackContext())
        //    {
        //        RFAFunction temp = db.RFAFunctions.FirstOrDefault(x => x.FunctionID == FunctionID);

        //        if (null == temp)
        //            return 0;

        //        db.RFAFunctions.Remove(temp);

        //        Action<string> deleteChildren = null;
        //        deleteChildren = (parentId) =>
        //        {
        //            List<RFAFunction> list = db.RFAFunctions.Where(x => x.ParentID == FunctionID).ToList<RFAFunction>();
        //            for (int i = 0; i < list.Count; i++)
        //            {
        //                var tempFunction = list[i];
        //                db.RFAFunctions.Remove(tempFunction);
        //                deleteChildren(tempFunction.FunctionID);
        //            }
        //        };
        //        deleteChildren(temp.FunctionID);

        //        return db.SaveChanges();
        //    }
        //}

        public int Add(FunctionDto obj)
        {
            using (var db = new BCEnterpriseContext())
            {
                RFAFunction temp = new RFAFunction();

                temp.FunctionID = obj.FunctionID;
                temp.MyID       = obj.MyID;
                temp.Name       = obj.Name;
                temp.ParentID   = obj.ParentID;
                temp.Available  = obj.Available;
                temp.Desription = obj.Desription;

                db.RFAFunctions.Add(temp);
                //                db.Entry<RFAFunction>(temp).State = EntityState.Added;

                return(db.SaveChanges());
            }
        }
        //public List<RFAFunction> Select(Expression<Func<RFAFunction, bool>> foo)
        //{
        //    using (var db = new BCBackContext())
        //    {
        //        List<RFAFunction> list = new List<RFAFunction>();
        //        list = db.RFAFunctions.Where(foo).ToList<RFAFunction>();
        //        return list;
        //    }
        //}

        public int Update(FunctionDto obj)
        {
            using (var db = new BCBackContext())
            {
                RFAFunction temp = db.RFAFunctions.Where(objx => objx.FunctionID.Equals(obj.FunctionID)).First();
                if (temp == null)
                {
                    return(0);
                }
                //temp.FunctionID = obj.FunctionID;
                temp.MyID = obj.MyID;
                temp.Name = obj.Name;
                //temp.ParentID = obj.ParentID;
                temp.Available  = obj.Available;
                temp.Desription = obj.Desription;

                return(db.SaveChanges());
            }
        }
        private int DeleteFunctionsons(BCEnterpriseContext db, string FunctionID)
        {
            RFAFunction temp = db.RFAFunctions.FirstOrDefault(x => x.FunctionID.Equals(FunctionID));

            if (null == temp)
            {
                return(0);
            }

            db.RFAFunctions.Remove(temp);

            List <RFAFunction> list = db.RFAFunctions.Where(x => x.ParentID.Equals(FunctionID)).ToList <RFAFunction>();

            for (int i = 0; i < list.Count; i++)
            {
                if (0 == DeleteFunctionsons(db, list[i].FunctionID))
                {
                    break;
                }
            }
            return(db.SaveChanges());
        }