コード例 #1
0
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="innerDataProvider"></param>
 public ModelDataService(EFAuditDataService <TEntity> innerDataProvider)
 {
     _innerDataProvider = innerDataProvider;
     _dataMapper        = new LangDataMapper <TModel, TEntity>();
     _entityRule        = ModelRule.Get <TEntity>();
     _modelRule         = ModelRule.Get <TModel>();
 }
コード例 #2
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);
        }
コード例 #3
0
 public void Dispose()
 {
     if (_innerDataProvider != null)
     {
         _innerDataProvider.Dispose();
         _innerDataProvider = null;
     }
 }
コード例 #4
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());
        }
コード例 #5
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);
        }
コード例 #6
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);
        }
コード例 #7
0
        public void TestLangCollectionsWrite()
        {
            Sys_DataLanguage lang = new Sys_DataLanguage()
            {
                Language = "en-us",
                BillId   = 3,
                Name     = "NoName",
                Text     = "Hello",
                BillType = "NoTypeName"
            };

            EFAuditDataService <Sys_DataLanguage> langWriter = new EFAuditDataService <Sys_DataLanguage>(new LangContext());

            int i = langWriter.Add(lang);

            Assert.AreEqual(i, 1);
        }
コード例 #8
0
        /// <summary>
        /// 保存岗位数据
        /// </summary>
        /// <param name="postModelList"></param>
        /// <returns></returns>
        public bool SavePostInfo(List <PostModel> postModelList)
        {
            var _context = SiteManager.Kernel.Get <ModelContext>();
            EFAuditDataService <PostModel> efMain = new EFAuditDataService <PostModel>(_context);

            try
            {
                int row = 0;
                #region 岗位信息
                foreach (PostModel item in postModelList)
                {
                    if (item._State.ToUpper() == "ADDED")
                    {
                        row = efMain.Add(item);
                    }
                    else if (item._State.ToUpper() == "MODIFIED")
                    {
                        row = efMain.Change(item);
                    }
                    else if (item._State.ToUpper() == "REMOVED")
                    {
                        row = efMain.Delete(item);
                    }

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

            efMain.EndTrans();
            return(true);
        }
コード例 #9
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);
        }
コード例 #10
0
        /// <summary>
        /// 保存多语言的文本信息
        /// </summary>
        /// <param name="dataService">当前的数据服务</param>
        /// <param name="e">数据实体对象</param>
        /// <param name="t">业务实体对象</param>
        public void SaveLanguages(EFAuditDataService <TEntity> dataService, TEntity e, TModel t)
        {
            var me = e as IMultiLanguage;

            if (me == null)
            {
                return;
            }
            ModelRule modelRule  = ModelRule.Get <TModel>();
            string    entityType = typeof(TEntity).Name;
            var       langs      = ResHelper.GetUsedCultureNames().Select(l => l.ToLower()).ToArray();

            if (me.LangTexts == null)
            {
                me.LangTexts = dataService.GetContext().Set <Sys_DataLanguage>().Where(d => d.BillId == e.Id && d.BillType == entityType).ToList();
            }
            var sysLangs = me.LangTexts;

            foreach (var rule in modelRule.SingleRules.Where(r => r.DataType == ExtDataType.MultiLanguage))
            {
                //先处理主文本框name不带语言后缀的表单值,表示是当前语言
                string langVal     = HttpContext.Current.Request.Form[rule.Name];
                string currentLang = ResHelper.CurrentCultureName.ToLower();
                var    langEntity  = sysLangs.FirstOrDefault(l => l.Language == currentLang);
                if (langEntity == null)
                {
                    langEntity = new Sys_DataLanguage
                    {
                        BillId   = e.Id,
                        BillType = entityType,
                        Language = currentLang,
                        Name     = rule.Name,
                        Text     = langVal
                    };
                    dataService.MarkState(langEntity, EntityState.Added);
                }

                else if (langVal != langEntity.Text)
                {
                    langEntity.Text = langVal;
                    dataService.MarkState(langEntity, EntityState.Modified);
                }

                RefHelper.SetValue(e, rule.Name, langVal);

                //再处理下拉列表中的文本框name带语言后缀的表单值
                foreach (var lang in langs.Where(l => l != currentLang))
                {
                    langVal    = HttpContext.Current.Request.Form[rule.Name + "-" + lang];
                    langEntity = sysLangs.FirstOrDefault(l => l.Language == lang);
                    if (langEntity == null)
                    {
                        langEntity = new Sys_DataLanguage
                        {
                            BillId   = e.Id,
                            BillType = entityType,
                            Language = lang,
                            Name     = rule.Name,
                            Text     = langVal
                        };
                        dataService.MarkState(langEntity, EntityState.Added);
                    }
                    else if (langVal != langEntity.Text)
                    {
                        langEntity.Text = langVal;
                        dataService.MarkState(langEntity, EntityState.Modified);
                    }
                }
            }
        }
コード例 #11
0
 /// <summary>
 /// ctor
 /// </summary>
 /// <param name="dataProvider">数据提供者</param>
 public MasterGridController(EFAuditDataService <T> dataProvider)
 {
     _dataProvider = dataProvider;
 }
コード例 #12
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);
        }
コード例 #13
0
        public void EFTestMultiObjectAddOrChange()
        {
            var    context = new TestContext();
            Random rand    = new Random(100);
            /////////////////////////////添加供应商///////////////////////////////////////
            List <Supplier> suppliers = new List <Supplier>();
            string          prefix    = DateTime.Now.ToString("yyMMddHHmmss");

            for (int i = 0; i < 100; i++)
            {
                suppliers.Add(new Supplier
                {
                    Name    = "Supplier" + prefix + i,
                    Address = "Address" + prefix + i,
                    Tel     = "12345" + prefix + i,
                });
            }

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

            var count = supplierProvider.Add(suppliers);

            Assert.AreEqual(count, suppliers.Count);

            /////////////////////////////添加产品///////////////////////////////////////
            List <Product> products = new List <Product>();

            for (int i = 0; i < 1000; i++)
            {
                products.Add(new Product
                {
                    Name  = "Product" + prefix + i,
                    Model = "Model" + prefix + i,
                    Price = DateTime.Now.Millisecond,
                    Unit  = DateTime.Now.Second,
                });
            }
            EFAuditDataService <Product> productProvider = new EFAuditDataService <Product>(context);

            count = productProvider.Add(products);
            Assert.AreEqual(count, products.Count);

            /////////////////////////////添加服务///////////////////////////////////////
            List <Service> services = new List <Service>();

            for (int i = 0; i < 200; i++)
            {
                services.Add(new Service
                {
                    Name        = "Service" + prefix + i,
                    ServiceType = "Type" + prefix + i,
                    Price       = DateTime.Now.Millisecond,
                });
            }
            EFAuditDataService <Service> serviceProvider = new EFAuditDataService <Service>(context);

            count = serviceProvider.Add(services);
            Assert.AreEqual(count, services.Count);

            services.ForEach(svc => svc.Price *= 1.2m);

            //测试批量修改
            count = serviceProvider.Change(services);
            Assert.AreEqual(count, services.Count);

            /////////////////////////////添加订单///////////////////////////////////////
            List <Order> orders = new List <Order>();

            for (int i = 0; i < 50; i++)
            {
                var order = new Order
                {
                    Name       = "Order" + prefix + i,
                    SupplierId = suppliers[rand.Next(suppliers.Count)].Id,
                };
                order.Details = new List <OrderDetail>();
                for (int j = 0; j < rand.Next(10); j++)
                {
                    order.Details.Add(new OrderDetail
                    {
                        Order    = order,
                        Product  = products[rand.Next(products.Count)],
                        Quantity = rand.Next(10),
                    });
                }

                order.Amount = order.Details.Sum(detail => detail.Quantity * detail.Product.Price);

                orders.Add(order);
            }

            EFAuditDataService <Order> orderProvider = new EFAuditDataService <Order>(context);

            orderProvider.Add(orders);

            /////////////////////////////添加服务合同///////////////////////////////////////
            List <Contract> contracts = new List <Contract>();

            for (int i = 0; i < 20; i++)
            {
                var service = services[rand.Next(services.Count)];
                contracts.Add(new Contract
                {
                    Service    = service,
                    Name       = "ServiceContract" + prefix + i,
                    SupplierId = suppliers[rand.Next(suppliers.Count)].Id,
                    Amount     = service.Price * 0.9m,
                });
            }
            EFAuditDataService <Contract> contractProvider = new EFAuditDataService <Contract>(context);

            count = contractProvider.Add(contracts);
            Assert.AreEqual(count, contracts.Count);
        }