我以前发布过这个数据层的介绍,一直没有做细致的说明,这次分几部分好好介绍。
(一)简单介绍:http://www.cnblogs.com/qingdie/p/3803696.html
(二)使用说明:http://www.cnblogs.com/qingdie/p/3803710.html
(三)开发实例:http://www.cnblogs.com/qingdie/p/3803745.html
开发实例
以下是一个CRM系统的开发实例:
涉及到使用本数据层的地方是业务逻辑层,所以只将业务逻辑层代码贴上来了,

系统的解决方案文件结构。




购买记录业务逻辑层代码
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using Qingdie.HTWeb.BLL; using Qingdie.HTWeb.CRM.Model; using Qingdie.HTWeb.Help; using Qingdie.HTWeb.Help.Filter; using QingdieDb; namespace Qingdie.HTWeb.CRM.BLL { public class BllBuyRecord { private const string Module = "产品购买记录"; public string Add(BuyRecord buyRecord) { var msg = new JsonMessage { Message = "添加成功" }; try { using (var db = new DbContext()) { var customer = db.Singordefault<Customer>(d => d.Name == buyRecord.Customer.Name, d => d.CustomerId); if (customer == null) { msg.Message = "客户:" + buyRecord.Customer.Name + "不存在"; return msg.ToString(); } buyRecord.Customer = customer; db.Add(buyRecord); msg.Success = true; } } catch (Exception err) { msg.Message = err.Message; BllErrLog.ErrLog(err, Module, "产品购买记录添加", buyRecord); } return msg.ToString(); } public string Edit(BuyRecord buyRecord) { var msg = new JsonMessage { Message = "编辑成功" }; try { using (var db = new DbContext()) { db.Update(buyRecord, d => d.BuyRecordId == buyRecord.BuyRecordId); msg.Success = true; } } catch (Exception err) { msg.Message = err.Message; BllErrLog.ErrLog(err, Module, "产品购买编辑", buyRecord); } return msg.ToString(); } public string Delete(int buyRecordId) { var msg = new JsonMessage { Message = "删除成功" }; try { using (var db = new DbContext()) { db.Delete<BuyRecord>(d => d.BuyRecordId == buyRecordId); msg.Success = true; } } catch (Exception err) { msg.Message = err.Message; BllErrLog.ErrLog(err, Module, "产品购买删除", buyRecordId); } return msg.ToString(); } public string BuyRecordListJson(int pageindex, int pagesize, string filterJson, string sort, string order) { try { var orderType = OrderType.Asc; if (!string.IsNullOrEmpty(order)) { if (order == "desc") orderType = OrderType.Desc; } OrderSort<BuyRecord> sorts; switch (sort) { case "Customer": sorts = new OrderSort<BuyRecord>(d => d.Customer.CustomerId, orderType); break; case "Product": sorts = new OrderSort<BuyRecord>(d => d.Product, orderType); break; case "Salesway": sorts = new OrderSort<BuyRecord>(d => d.Salesway, orderType); break; default: sorts = new OrderSort<BuyRecord>(d => d.BuyTime, orderType); break; } Expression<Func<BuyRecord, bool>> lambda = null; using (var db = new DbContext()) { if (!string.IsNullOrEmpty(filterJson)) { var fg = JsonHelper.ConvertToObject<FilterGroup>(filterJson); if (fg != null) { foreach (var rule in fg.Rules) { var o = rule.data.ToString(); if (string.IsNullOrEmpty(o)) continue; switch (rule.field) { case "Customer": var c = db.Singordefault<Customer>(d => d.Name.Contains(o), d => d.CustomerId); if (c!=null) { lambda = d => d.Customer.CustomerId == c.CustomerId; } break; case "Product": lambda = lambda.AndAlso(d => d.Product == o); break; case "Salesway": lambda = lambda.AndAlso(d => d.Salesway == o); break; } } } } int pagecount; int datacount; var button = db.SelectPageObject(null, pageindex, pagesize, out pagecount, out datacount, sorts); return JsonHelper.ToJson(datacount, button); } } catch (Exception err) { BllErrLog.ErrLog(err, Module, "产品购买获取"); } return "[]"; } } }
客户信息维护代码
using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Web; using Qingdie.help; using Qingdie.HTWeb.BLL; using Qingdie.HTWeb.CRM.Model; using Qingdie.HTWeb.Help; using Qingdie.HTWeb.Help.Filter; using QingdieDb; namespace Qingdie.HTWeb.CRM.BLL { public class BllCustomer { private const string Module = "客户信息管理"; public string CustomerListJson(int pageindex, int pagesize, string filterJson, string sort, string order) { try { var orderType = OrderType.Asc; if (!string.IsNullOrEmpty(order)) { if (order == "desc") orderType = OrderType.Desc; } if (string.IsNullOrEmpty(sort)) sort = "CustomerId"; var sorts = new List<OrderSort<Customer>>(); switch (sort) { case "Name": sorts.Add(new OrderSort<Customer>(d => d.Name, orderType)); break; case "Contact": sorts.Add(new OrderSort<Customer>(d => d.Contact, orderType)); break; case "Province": sorts.Add(new OrderSort<Customer>(d => d.Province, orderType)); break; case "CustomerSource": sorts.Add(new OrderSort<Customer>(d => d.CustomerSource, orderType)); break; case "Products": sorts.Add(new OrderSort<Customer>(d => d.Products, orderType)); break; case "AddTime": sorts.Add(new OrderSort<Customer>(d => d.AddTime, orderType)); break; } Expression<Func<Customer, bool>> lambda =null; if (!string.IsNullOrEmpty(filterJson)) { var fg = JsonHelper.ConvertToObject<FilterGroup>(filterJson); if (fg != null) { foreach (var rule in fg.Rules) { var o = rule.data.ToString(); if (string.IsNullOrEmpty(o)) continue; switch (rule.field) { case "Name": lambda = d => d.Name.Contains(o); break; case "Contact": lambda =d => d.Contact == o; break; case "Mobile": lambda =d => d.Mobile == o; break; case "Phone": lambda = d => d.Phone == o; break; case "Email": lambda = d => d.Email == o; break; case "QQ": lambda =d => d.QQ == o; break; case "Fax": lambda = d => d.Fax == o; break; case "WeChat": lambda = d => d.WeChat == o; break; case "Website": lambda = d => d.Website == o; break; case "CustomerSource": lambda = d => d.CustomerSource == o; break; case "Products": lambda = d => d.Products == o; break; case "CategoryId": var idlist = o.Split(',').Select(int.Parse).ToList(); lambda = d => d.Category.CategoryId.Include(idlist); break; } } } } using (var db = new DbContext()) { int pagecount; int datacount; var button = db.SelectPageObject(lambda, pageindex, pagesize, out pagecount, out datacount, sorts); return JsonHelper.ToJson(datacount, button); } } catch (Exception err) { BllErrLog.ErrLog(err, Module, "客户列表获取"); } return "[]"; } public string Add(Customer customer) { var msg = new JsonMessage { Message = "添加成功" }; try { using (var db = new DbContext()) { customer.AddTime = CommonMethod.ChineDateTimeNow; customer.UserId = SysVisitor.Instance.UserId; db.Add(customer); msg.Success = true; } } catch (Exception err) { msg.Message = err.Message; BllErrLog.ErrLog(err, Module, "客户添加", customer); } return msg.ToString(); } public string Edit(Customer customer) { var msg = new JsonMessage { Message = "编辑成功" }; try { using (var db = new DbContext()) { db.Update(customer, d => d.CustomerId == customer.CustomerId); msg.Success = true; } } catch (Exception err) { msg.Message = err.Message; BllErrLog.ErrLog(err, Module, "客户编辑", customer); } return msg.ToString(); } public string Delete(int customerId) { var msg = new JsonMessage { Message = "删除成功" }; try { using (var db = new DbContext()) { db.Delete<Customer>(d => d.CustomerId == customerId); msg.Success = true; } } catch (Exception err) { msg.Message = err.Message; BllErrLog.ErrLog(err, Module, "客户删除", customerId); } return msg.ToString(); } public string Inport(string file) { var msg = new JsonMessage(); try { var filearr = file.Split('|'); var customeList = new List<Customer>(); foreach (var s in filearr) { try { if (string.IsNullOrEmpty(s)) continue; var filename = HttpContext.Current.Server.MapPath(s); if (!File.Exists(filename)) continue; var tb = IoHelp.IoExcel.ExcelToDataTable(filename); customeList.AddRange(from row in tb.Select() where !string.IsNullOrEmpty(row["客户名称"].ToString()) select new Customer { Name = row["客户名称"].ToString(), Contact = row["联系人"].ToString(), Mobile = row["手机"].ToString(), Phone = row["固定电话"].ToString(), Email = row["邮箱"].ToString(), QQ = row["QQ"].ToString(), Fax = row["传真"].ToString(), WeChat = row["微信"].ToString(), Province = row["省份"].ToString(), Products = row["主营产品"].ToString(), Website = row["网站"].ToString(), CustomerSource = row["客户来源"].ToString() }); } catch (Exception err) { msg.Message = string.Format("文件:{0}部分导入失败,错误信息:{1}", s, err.Message); BllErrLog.ErrLog(err, Module, "客户导入", s); } } using (var db = new DbContext()) { db.Add(customeList); msg.Success = true; if (string.IsNullOrEmpty(msg.Message)) { msg.Message = "导入成功"; } } } catch (Exception err) { msg.Message = err.Message; BllErrLog.ErrLog(err, Module, "客户导入", file); } return msg.ToString(); } public void Exout(HttpContext context) { var msg = new JsonMessage { Message = "删除成功" }; try { using (var db = new DbContext()) { var tb = db.SelectTable<Customer>(null); tb.Columns.Remove("CustomerId"); tb.Columns.Remove("UserId"); tb.Columns.Remove("CategoryId"); tb.Columns.Remove("UniqueKey"); tb.Columns["Name"].ColumnName = "客户名称"; tb.Columns["Contact"].ColumnName = "联系人"; tb.Columns["Mobile"].ColumnName = "手机"; tb.Columns["Phone"].ColumnName = "固定电话"; tb.Columns["Email"].ColumnName = "邮箱"; tb.Columns["Fax"].ColumnName = "传真"; tb.Columns["WeChat"].ColumnName = "微信"; tb.Columns["Province"].ColumnName = "省份"; tb.Columns["Products"].ColumnName = "主营产品"; tb.Columns["CustomerSource"].ColumnName = "客户来源"; tb.Columns["Website"].ColumnName = "网站"; tb.Columns["AddTime"].ColumnName = "添加时间"; var path = context.Server.MapPath("/upload/temp/"); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } var filename = CommonMethod.ChineDateTimeNow.ToString("yyyy-MM-dd HH mm ss") + ".xls"; IoHelp.IoExcel.DataTableToExcel(tb,path + filename); msg.Data = "/upload/temp/"+filename; msg.Success = true; } } catch (Exception err) { msg.Message = err.Message; BllErrLog.ErrLog(err, Module, "客户导出"); } context.Response.Write(msg.ToString()); } } }
产品评价业务逻辑层代码:
产品评价购买记录实体代码:
using System; using QingdieDb; namespace Qingdie.HTWeb.CRM.Model { [Entity("BuyRecordId")] public class BuyRecord { [Property(Identity = true)] public int? BuyRecordId { get; set; } /// <summary> /// 客户 /// </summary> [Relationship] public Customer Customer { get; set; } /// <summary> /// 交易时间 /// </summary> public DateTime BuyTime { get; set; } /// <summary> /// 交易产品 /// </summary> public string Product { get; set; } /// <summary> /// 销售方式 /// </summary> public string Salesway { get; set; } } }
客户分类实体:
using System.Collections.Generic; using QingdieDb; namespace Qingdie.HTWeb.CRM.Model { [Entity("CategoryId")] public class Category { [Property(Identity = true)] public int? CategoryId { get; set; } public string Name { get; set; } public int? ParentId { get; set; } public int? SortNum { get; set; } [Relationship(RelationKey = "ParentId")] public List<Category> children { get; set; } } }

浙公网安备 33010602011771号