コード例 #1
0
        /// <summary>
        /// 返回业务模型对象全部的结果查询表达式
        /// </summary>
        /// <returns></returns>
        public virtual IQueryable <TModel> GetQuery()
        {
            IQueryable <TEntity> query = _innerDataProvider.GetQuery();

            if (typeof(MultiLanguage).IsAssignableFrom(typeof(TEntity)))
            {
                query = query.Include("LangTexts");
            }

            //如果实现逻辑删除接口,并且没有改写EFAuditDataSerice,则在此加条件
            if (typeof(ICanLogicalDeleteEntity).IsAssignableFrom(typeof(TEntity)) && _innerDataProvider.GetType() == typeof(EFAuditDataService <TEntity>))
            {
                query = query.Where("IsDeleted=false");
            }

            if (typeof(IDataRule).IsAssignableFrom(typeof(TEntity)))
            {
                var context = _innerDataProvider.GetContext();
                var userId  = AppManager.Instance.GetCurrentUserId().ToInt();
                query = query.Where(t => context.Set <Sys_DataRule>().Any(dr => dr.BillId == t.Id && dr.ObjectId == userId));
            }
            var langMapper = new LangDataMapper <TModel, TEntity>();
            var duQuery    = new DeptUserAuthQuery <TModel>();

            return(duQuery.GetQuery(query.ProjectTo <TModel>()));
        }
コード例 #2
0
        public void EFTestMultiTableQuery()
        {
            //需求:查找所有供应商的产品和服务的总价,同一供应商的产品总价和服务总价作对比。
            // 格式:
            // 供应商名称  订单产品总价  合同服务总价
            // XXXXX        12000         11000
            // ...          ...            ...

            //两个条件:
            //1. 不能遗漏订单或合同统计两者之一不为0的供应商
            //2. 不能留下即没有订单又没有合同的供应商

            // 此示例比较复杂,相对简单一点的示例,请参见msdn:
            // https://msdn.microsoft.com/zh-cn/library/bb311040(v=vs.100).aspx

            var context = new TestContext();

            var supplierProvider = new EFAuditDataService <Supplier>(context);

            //如果没有数据,则调用一下新增数据的方法
            if (supplierProvider.GetQuery().Count() == 0)
            {
                EFTestMultiObjectAddOrChange();
            }

            var orderProvider    = new EFAuditDataService <Order>(context);
            var contractProvider = new EFAuditDataService <Contract>(context);

            var result = from s in supplierProvider.GetQuery()
                         join o in orderProvider.GetQuery()
                         .GroupBy(op => op.SupplierId)
                         .Select(g => new { SupplierId = g.Key, OrderAmount = g.Sum(order => order.Amount) })
                         on s.Id equals o.SupplierId
                         into orderGroup
                         from item1 in orderGroup.DefaultIfEmpty()
                         join c in contractProvider.GetQuery().GroupBy(op => op.SupplierId)
                         .Select(g => new { SupplierId = g.Key, ContractAmount = g.Sum(contract => contract.Amount) })
                         on s.Id equals c.SupplierId
                         into contractGroup
                         from item2 in contractGroup.DefaultIfEmpty()
                         select new { SupplierName = s.Name, OrderAmount = item1 == null ? 0 : item1.OrderAmount, ContractAmount = item2 == null ? 0 : item2.ContractAmount };

            //为了清楚起见,这个查询可以分开写,但最终提交到数据库是单条SQL语句。
            // 注意在查询的变换过程中,中间不要ToList()。
            // 最后的结果如果要分页,也不要ToList()
            result = result.Where(a => a.OrderAmount > 0 || a.ContractAmount > 0);

            //using Jurassic.Com.Tools 后,还可以这样写:
            //result = result.Where("OrderAmount>0 OR ContractAmount>0");

            Debug.WriteLine("SupplierName\t\tOrderAmount\t\tContractAmount");
            foreach (var r in result)
            {
                Debug.WriteLine(r.SupplierName + "\t\t" + r.OrderAmount + "\t\t" + r.ContractAmount);
            }
            Debug.WriteLine("----------------Count=" + result.Count());
        }
コード例 #3
0
        public void TestParseIntArray()
        {
            var list = new List <int> {
                1, 2, 3
            };

            var pOrder = Expression.Parameter(typeof(Order), "order");
            MemberExpression mOrderId = Expression.Property(pOrder, "Id");

            var        constList      = Expression.Constant(list, typeof(List <int>));
            MethodInfo containsMethod = typeof(List <int>).GetMethod("Contains");
            var        filter         = Expression.Call(constList, containsMethod, mOrderId);

            var lambda = Expression.Lambda <Func <Order, bool> >(filter, pOrder);

            var context = new TestContext();
            EFAuditDataService <Order> orderProvider = new EFAuditDataService <Order>(context);
            var query = orderProvider.GetQuery()
                        //.Where(order=>list.Contains(order.Id));
                        .Where(lambda);

            int count = query.Count();

            Assert.IsTrue(count > 0);
        }
コード例 #4
0
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="authTokenModel">数据节点对象</param>
        /// <returns></returns>
        public bool Delete(DepartmentModel organizationModel)
        {
            var _context = SiteManager.Kernel.Get <ModelContext>();
            EFAuditDataService <DepartmentModel> efMain = new EFAuditDataService <DepartmentModel>(_context);
            EFAuditDataService <DepPostModel>    efPost = new EFAuditDataService <DepPostModel>(_context);
            EFAuditDataService <DepUserModel>    efUser = new EFAuditDataService <DepUserModel>(_context);

            try
            {
                int row = 0;
                #region 组织机构与岗位信息
                List <DepPostModel> postList = efPost.GetQuery().Where(p => p.DepId == organizationModel.Id).ToList();
                foreach (DepPostModel item in postList)
                {
                    row = efPost.Delete(item);
                    if (row < 0)
                    {
                        efMain.RollbackTrans();
                        return(false);
                    }
                }
                #endregion

                #region 组织机构与用户信息
                List <DepUserModel> userList = efUser.GetQuery().Where(p => p.DepId == organizationModel.Id).ToList();
                foreach (DepUserModel item in userList)
                {
                    row = efUser.Delete(item);
                    if (row < 0)
                    {
                        efMain.RollbackTrans();
                        return(false);
                    }
                }
                #endregion

                #region 组织机构主表数据
                row = efMain.Delete(organizationModel);
                if (row < 0)
                {
                    efMain.RollbackTrans();
                    return(false);
                }
                #endregion
            }
            catch (Exception)
            {
                efMain.RollbackTrans();
                throw;
            }

            efMain.EndTrans();
            return(true);
        }
コード例 #5
0
        /// <summary>
        /// 验证该岗位是否存在引用关系
        /// 岗位与部门表
        /// 岗位与部门人员表
        /// </summary>
        /// <returns>true 没有引用关系  false 有引用关系</returns>
        public bool IsNotLinkPost(PostModel postModel)
        {
            var _context = SiteManager.Kernel.Get <ModelContext>();
            EFAuditDataService <DepPostModel> efPost = new EFAuditDataService <DepPostModel>(_context);
            EFAuditDataService <DepUserModel> efUser = new EFAuditDataService <DepUserModel>(_context);

            List <DepPostModel> postLsit = efPost.GetQuery().Where(u => u.IsDeleted == 0 && u.PostId == postModel.Id).ToList();
            List <DepUserModel> userLsit = efUser.GetQuery().Where(u => u.IsDeleted == 0 && u.PostId == postModel.Id).ToList();

            if (!postLsit.Any() && !userLsit.Any())
            {
                return(true);
            }
            return(false);
        }
コード例 #6
0
        /// <summary>
        /// 返回一个分页的文章列表
        /// </summary>
        /// <param name="pageModel">从视图传过来的分页数据对象</param>
        /// <returns></returns>
        public virtual ActionResult Index(PageModel pageModel)
        {
            pageModel.CatalogId = CatalogId;
            key = pageModel.Key;
            if (pageModel.PageSize <= 5)
            {
                pageModel.PageSize = 5;
            }
            BeforeGetPageData(pageModel);
            if (pageModel.SortField.IsEmpty())
            {
                pageModel.SortField = "Id";
                pageModel.SortOrder = "DESC";
            }
            var pager = new Pager <T>(_dataProvider.GetQuery(), pageModel.PageIndex, pageModel.PageSize);

            AfterGetPageData(pager);
            return(View(pager));
        }
コード例 #7
0
        public void TestLangCollectionsRead()
        {
            //SiteManager.Kernel.Bind<IModelEntityConverter<TestLangTableModel, TestLangTable>>().To<LangTableConveter>();
            //Mapper.CreateMap<TestLangTable, TestLangTableModel>().ForMember(d => d.Remark, opt => opt.MapFrom(s => "RemarkTest"));
            var service = new EFAuditDataService <TestLangTable>(new LangContext());
            var query   = service.GetQuery().Where(t => t.LangTexts.Count > 0);
            int count   = query.Count();
            var list    = query.Include("LangTexts").ToList();

            //Assert.IsTrue(list.Count > 0);
            Assert.AreEqual(count, 2);
            var service2 = new EFAuditDataService <TestLangTable2>(new LangContext());
            var query2   = service2.GetQuery().Where(t => t.LangTexts.Count > 0);
            int count2   = query2.Count();

            Assert.AreEqual(count, 2);
            //ModelDataService<TestLangTableModel, TestLangTable> langService2 = new ModelDataService<TestLangTableModel, TestLangTable>(new EFAuditDataService<TestLangTable>(new LangContext()));
            //var query2 = langService2.GetQuery().Where(t => t.Name == "王");
            //int count2 = query2.Count();
            //Assert.IsTrue(count2 == 0);
        }
コード例 #8
0
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="authTokenModel">数据节点对象</param>
        /// <returns></returns>
        public bool SaveInfo(DepartmentModel organizationModel)
        {
            var _context = SiteManager.Kernel.Get <ModelContext>();

            EFAuditDataService <DepartmentModel> efMain = new EFAuditDataService <DepartmentModel>(_context);
            EFAuditDataService <DepPostModel>    efPost = new EFAuditDataService <DepPostModel>(_context);
            EFAuditDataService <DepUserModel>    efUser = new EFAuditDataService <DepUserModel>(_context);

            try
            {
                #region 组织机构主表数据
                efMain.BeginTrans();
                int row = 0;
                if (organizationModel.Id == null || organizationModel.Id <= 0)
                {
                    row = efMain.Add(organizationModel);
                }
                else
                {
                    row = efMain.Change(organizationModel);
                }

                if (row < 0)
                {
                    efMain.RollbackTrans();
                    return(false);
                }
                #endregion

                #region 组织机构与岗位信息
                foreach (DepPostModel item in organizationModel.DepPostModelList)
                {
                    item.DepId          = organizationModel.Id;
                    item.IsActive       = 1;
                    item.ExamineType    = "";
                    item.IsDeleted      = 0;
                    item.IsDisabled     = 0;
                    item.Name           = "";
                    item.CreateDatetime = DateTime.Now;

                    if (item._State.ToUpper() == "ADDED")
                    {
                        row = efPost.Add(item);
                    }
                    else if (item._State.ToUpper() == "MODIFIED")
                    {
                        row = efPost.Change(item);
                    }
                    else if (item._State.ToUpper() == "REMOVED")
                    {
                        row = efPost.Delete(item);
                    }

                    if (row < 0)
                    {
                        efMain.RollbackTrans();
                        return(false);
                    }
                }
                #endregion

                #region 组织机构与用户信息

                foreach (DepUserModel item in organizationModel.DepUserModelList)
                {
                    #region 设置用户的主部门,清除已存在其他主部门标识,确定一个用户只有一个主要部门
                    //如果某个用户设置了主部门首先查询是否在其他部门下已经存在设置,如果存在清除掉,重新写入主部门标识
                    if (item.IsMain == 1)
                    {
                        List <DepUserModel> dList = efUser.GetQuery().Where(u => u.UserName == item.UserName && u.DepId != item.DepId).ToList();
                        foreach (DepUserModel m in dList)
                        {
                            m.IsMain = 0;
                            row      = efUser.Change(m);
                            if (row < 0)
                            {
                                efMain.RollbackTrans();
                                return(false);
                            }
                        }
                    }
                    #endregion

                    item.DepId          = organizationModel.Id;
                    item.ContractLenght = item.ContractLenght == null ? 0 : item.ContractLenght;
                    item.ExamineType    = "";
                    item.IsDeleted      = 0;
                    item.JoinDateTime   = item.JoinDateTime == null ? DateTime.Now : item.JoinDateTime;
                    item.IsSuspension   = item.IsSuspension == null ? 0 : item.ContractLenght;
                    item.IsLeader       = item.IsLeader == null ? 0 : item.IsLeader;
                    item.IsMain         = item.IsMain == null ? 0 : item.IsMain;

                    item.CreateDatetime = DateTime.Now;

                    if (item._State.ToUpper() == "ADDED")
                    {
                        row = efUser.Add(item);
                    }
                    else if (item._State.ToUpper() == "MODIFIED")
                    {
                        row = efUser.Change(item);
                    }
                    else if (item._State.ToUpper() == "REMOVED")
                    {
                        row = efUser.Delete(item);
                    }

                    if (row < 0)
                    {
                        efMain.RollbackTrans();
                        return(false);
                    }
                }


                #endregion
            }
            catch (Exception)
            {
                efMain.RollbackTrans();
                throw;
            }

            efMain.EndTrans();
            return(true);
        }