本节将介绍如何进行业务项目搭建。
本业务项目示例是简单的企业信息管理功能,业务项目采用Code First方式,搭建包括:
- 创建实体项目
- 创建实体数据表映射
- 创建业务处理项目
- 创建业务Web项目
搭建完项目效果:
1、创建实体项目-ShiQuan.Company.Entity
创建企业信息实体
示例中企业信息包括:编号、名称、负责人、联系人、联系电话、联系地址等
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ShiQuan.Company.Entity
{
///
/// 企业信息
///
public class CompanyInfoEntity:BasicCompanyEntity
{
///
/// 编号
///
[Display(Name = "编号"), MaxLength(50)]
public string Code { get; set; }
///
/// 编号
///
[Display(Name = "编号"), MaxLength(100)]
public string Name { get; set; }
///
/// 负责人
///
[Display(Name = "负责人"), MaxLength(50)]
public string Leader { get; set; }
///
/// 联系人
///
[Display(Name = "联系人"), MaxLength(50)]
public string Linkman { get; set; }
///
/// 联系电话
///
[Display(Name = "联系电话"), MaxLength(50)]
public string Phone { get; set; }
///
/// 联系地址
///
[Display(Name = "联系地址"), MaxLength(255)]
public string Address { get; set; }
///
/// 备注说明
///
[Display(Name = "备注说明"), MaxLength(255)]
public string Remark { get; set; }
}
}
2、创建实体数据表映射项目-ShiQuan.Company.Mapping
创建空数据库
创建项目
创建企业信息数据表映射
using ShiQuan.Company.Entity;
using System;
using System.Collections.Generic;
using System.Data.Entity.ModelConfiguration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ShiQuan.Company.Mapping
{
///
/// 实体数据映射
///
public class CompanyInfoMap : EntityTypeConfiguration
{
public CompanyInfoMap()
{
#region 表、主键
//表
this.ToTable("CompanyInfo");
//主键
this.HasKey(t => t.Id);
#endregion
#region 配置关系
#endregion
}
}
}
创建实体数据库上下文
选择空Code First 模型
namespace ShiQuan.Company.Mapping { using System; using System.Data.Entity; using System.Data.Entity.ModelConfiguration.Conventions; using System.Linq; public class CompanyDbContext : DbContext { //您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config) //使用“CompanyDbContext”连接字符串。默认情况下,此连接字符串针对您的 LocalDb 实例上的 //“ShiQuan.Company.Mapping.CompanyDbContext”数据库。 // //如果您想要针对其他数据库和/或数据库提供程序,请在应用程序配置文件中修改“CompanyDbContext” //连接字符串。 public CompanyDbContext() : base("name=CompanyDbContext") { } //为您要在模型中包含的每种实体类型都添加 DbSet。有关配置和使用 Code First 模型 //的详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=390109。 // public virtual DbSetMyEntities { get; set; } ////// 重写数据型号创建,添加企业信息数据表映射 /// /// protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove (); modelBuilder.Configurations.Add(new CompanyInfoMap()); base.OnModelCreating(modelBuilder); } } }
配置数据库连接
<connectionStrings> <add name="CompanyDbContext" connectionString="Server=127.0.0.1;Initial Catalog=VSD_CompanyDB;User ID=sa;Password=123456*a" providerName="System.Data.SqlClient" /> connectionStrings>
配置数据库上下文允许进行更新升级
using System; using System.Collections.Generic; using System.Data.Entity.Migrations; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ShiQuan.Company.Mapping.Migrations { internal sealed class Configuration : DbMigrationsConfiguration{ public Configuration() { //配置允许数据库更新升级 AutomaticMigrationsEnabled = true; AutomaticMigrationDataLossAllowed = true; } protected override void Seed(CompanyDbContext dbContext) { } } }
使用update-database 对数据库进行升级更新
3、创建企业信息管理业务处理项目-ShiQuan.Company.Business
创建企业信息库业务处理基础类,实现实体查询、删除和保存功能。
using Learun.DataBase.Repository; using Learun.Util; using ShiQuan.Company.Entity; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace ShiQuan.Company.Business { ////// 企业信息管理库业务处理基础类 /// /// public class BasicCompanyBLL : RepositoryFactory where T : class,new() { protected string dbConn = ""; /// /// 构造函数 /// public BasicCompanyBLL() { //this.dbConn = ConfigurationManager.ConnectionStrings["CompanyDbContext"].ConnectionString; this.dbConn = "CompanyDbContext"; } #region 获取数据 /// /// 获取列表 /// /// 分页 /// 查询参数 /// 返回分页列表 public virtual IEnumerable GetPageList(Pagination pagination, string queryJson) { var expression = LinqExtensions.True (); expression = QueryStringToExpression(expression, queryJson); return this.BaseRepository(dbConn).FindList(expression, pagination); } /// /// 获取列表 /// /// 分页 /// 查询参数 /// 返回分页列表 public virtual IEnumerable GetPageList(Pagination pagination, Expression bool>> linq) { return this.BaseRepository(dbConn).FindList(linq, pagination); } /// /// 获取列表 /// /// 查询参数 /// 返回列表 public virtual IEnumerable GetList(string queryJson) { var expression = LinqExtensions.True (); expression = QueryStringToExpression(expression, queryJson); return this.BaseRepository(dbConn).IQueryable(expression); } /// /// 获取列表 /// /// 查询参数 /// 返回列表 public virtual IQueryable GetList(Expression bool>> linq) { return this.BaseRepository(dbConn).IQueryable(linq); } /// /// 获取实体 /// /// 主键值 /// public virtual T GetEntity(string keyValue) { return this.BaseRepository(dbConn).FindEntity(keyValue); } /// /// 根据条件获取实体 /// /// Linq条件 /// public virtual T FindEntity(Expression bool>> linq) { return this.BaseRepository(dbConn).FindEntity(linq); } /// /// 获取数据 /// /// /// public virtual DataTable GetTable(string queryJson) { string sql = GetSQL(queryJson); return this.BaseRepository(dbConn).FindTable(sql); } /// /// 获取数据 /// /// /// public virtual DataTable GetTableBySql(string sql) { //string sql = GetSQL(queryJson); return this.BaseRepository(dbConn).FindTable(sql); } /// /// 获取分页列表,返回Datatable /// /// 查询参数 /// 返回列表 public virtual DataTable GetPageTable(Pagination pagination, string queryJson) { string sql = GetSQL(queryJson); return this.BaseRepository(dbConn).FindTable(sql, pagination); } /// /// 获取分页列表,返回Datatable /// /// 查询参数 /// 返回列表 public virtual DataTable GetPageTableBySql(Pagination pagination, string sql) { //string sql = GetSQL(queryJson); return this.BaseRepository(dbConn).FindTable(sql, pagination); } #endregion #region 提交数据 /// /// 删除数据 /// /// 主键 public virtual void RemoveForm(string keyValue) { string[] dels = keyValue.Split(','); if (dels.Length > 1) { IRepository db = new RepositoryFactory().BaseRepository(dbConn).BeginTrans(); try { foreach (var item in dels) { db.Delete(item); } db.Commit(); } catch (Exception) { db.Rollback(); throw; } } else { this.BaseRepository(dbConn).Delete(keyValue); } } /// /// 保存表单(新增、修改) /// /// 主键值 /// 实体对象 /// public virtual void SaveForm(string keyValue, T entity) { if (!string.IsNullOrEmpty(keyValue)) { this.BaseRepository(dbConn).Update(entity); } else { this.BaseRepository(dbConn).Insert(entity); } } #endregion #region 帮助函数 /// /// 生成查询表达式 /// /// 查询对象 /// protected virtual Expression bool>> QueryStringToExpression(Expression bool>> expression, string queryJson) { if (string.IsNullOrEmpty(queryJson)) return expression; var queryParam = queryJson.ToJObject(); if (!queryParam["condition"].IsEmpty() && !queryParam["keyword"].IsEmpty()) { string condition = queryParam["condition"].ToString(); string keyword = queryParam["keyword"].ToString(); switch (condition) { default: break; } } return expression; } /// /// 根据实体生成SQL /// /// 查询对象 /// protected virtual string GetSQL(string queryJson) { StringBuilder sb = new StringBuilder(); var queryParam = queryJson.ToJObject(); if (!queryParam["condition"].IsEmpty() && !queryParam["keyword"].IsEmpty()) { string condition = queryParam["condition"].ToString(); string keyword = queryParam["keyword"].ToString(); sb.Append(" AND " + condition + " like '%" + keyword + "%'"); } return sb.ToString(); } #endregion } }
创建企业信息业务处理类,继承基础业务处理类,重写保存、过滤条件方法。
using ShiQuan.Company.Entity; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Linq.Expressions; using Learun.Util; using Learun.Util.Operat; namespace ShiQuan.Company.Business { ////// 实现企业信息管理业务处理,继承企业信息库基础业务处理 /// public class CompanyInfoBLL : BasicCompanyBLL { /// /// 数据保存 /// /// /// public override void SaveForm(string keyValue, CompanyInfoEntity entity) { try { if (string.IsNullOrEmpty(keyValue)) { entity.Id = Guid.NewGuid().ToString(); } else entity.Id = keyValue; base.SaveForm(keyValue, entity); } catch (Exception ex) { throw; } } /// /// 重写查询过滤条件 /// /// /// /// protected override Expression bool>> QueryStringToExpression(Expression bool>> expression, string queryJson) { if (string.IsNullOrEmpty(queryJson)) return expression; var queryParam = queryJson.ToJObject(); if (queryParam["Code"].IsEmpty() == false) { string keyword = queryParam["Code"].ToString(); expression = expression.And(my => my.Code == keyword); } if (!queryParam["condition"].IsEmpty() && !queryParam["keyword"].IsEmpty()) { string condition = queryParam["condition"].ToString(); string keyword = queryParam["keyword"].ToString(); switch (condition) { default: break; } } return expression; } } }
4、创建企业信息管理Web项目-ShiQuan.Company.Web
创建空的企业信息管理控制器,实现列表、编辑视图,数据查询、删除、保存方法。
using Learun.Application.Web; using Learun.Util; using ShiQuan.Company.Business; using ShiQuan.Company.Entity; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace ShiQuan.Company.Web.Areas.CompanyManage.Controllers { ////// 企业信息管理 /// public class CompanyInfoController : MvcControllerBase { // GET: CompanyManage/CompanyInfo CompanyInfoBLL service = new CompanyInfoBLL(); /// /// 列表视图 /// /// public ActionResult CompanyInfoIndex() { return View(); } /// /// 编辑视图 /// /// public ActionResult CompanyInfoForm() { return View(); } #region 获取数据 /// /// 获取列表 /// /// 分页参数 /// 查询参数 /// 返回分页列表Json [HttpGet] public ActionResult GetPageListJson(string pagination, string queryJson) { Pagination paginationobj = pagination.ToObject (); var watch = CommonHelper.TimerStart(); var data = service.GetPageList(paginationobj, queryJson); var jsonData = new { rows = data, total = paginationobj.total, page = paginationobj.page, records = paginationobj.records, costtime = CommonHelper.TimerEnd(watch) }; //return ToJsonResult(jsonData); return Success(jsonData); } /// /// 获取列表 /// /// 查询参数 /// 返回列表Json [HttpGet] public ActionResult GetListJson(string queryJson) { var data = service.GetList(queryJson); return ToJsonResult(data); } /// /// 获取实体 /// /// 主键值 /// 返回对象Json [HttpGet] public ActionResult GetFormJson(string keyValue) { var data = service.GetEntity(keyValue); return ToJsonResult(data); } #endregion #region 提交数据 /// /// 删除数据 /// /// 主键值 /// [HttpPost] [ValidateAntiForgeryToken] [AjaxOnly] public ActionResult RemoveForm(string keyValue) { service.RemoveForm(keyValue); return Success("删除成功。"); } /// /// 保存表单(新增、修改) /// /// 主键值 /// 实体对象 /// [HttpPost] [ValidateAntiForgeryToken] [AjaxOnly] public ActionResult SaveForm(string keyValue, CompanyInfoEntity entity) { service.SaveForm(keyValue, entity); return Success("操作成功。", entity); } #endregion } }
创建列表界面
@{ ViewBag.Title = "客户管理"; Layout = "~/Views/Shared/_Index.cshtml"; }class="lr-layout">class="lr-layout-center">class="lr-layout-wrap lr-layout-wrap-notitle">class="lr-layout-tool">class="lr-layout-tool-left">class="lr-layout-tool-item"> "txt_Keyword" type="text" class="form-control" placeholder="请输查询关键字" />class="lr-layout-tool-item"> "btn_Search" class="btn btn-primary btn-sm">class="fa fa-search"> class="lrlg">查询class="lr-layout-tool-right">class="btn-group btn-group-sm" learun-authorize="yes"> "btnAdd" class="btn btn-default">class="fa fa-plus"> class="lrlg">新增 "btnEdit" class="btn btn-default">class="fa fa-pencil-square-o"> class="lrlg">编辑 "btnDelete" class="btn btn-default">class="fa fa-trash-o"> class="lrlg">删除class="lr-layout-body" id="gridtable">
创建编辑界面
@{ ViewBag.Title = "客户添加"; Layout = "~/Views/Shared/_Form.cshtml"; }class="lr-form-wrap" id="form">class="col-xs-12 lr-form-item">class="lr-form-item-title">编号"宋体">*"Code" type="text" class="form-control" isvalid="yes" checkexpession="NotNull" />class="col-xs-12 lr-form-item">class="lr-form-item-title">名称"宋体">*"Name" type="text" class="form-control" isvalid="yes" checkexpession="NotNull" />class="col-xs-12 lr-form-item">class="lr-form-item-title">负责人"宋体">*"Leader" type="text" class="form-control" isvalid="yes" checkexpession="NotNull" />class="col-xs-12 lr-form-item">class="lr-form-item-title">联系人"Linkman" type="text" class="form-control" isvalid="no" checkexpession="NotNull" />class="col-xs-12 lr-form-item">class="lr-form-item-title">联系电话"Phone" type="text" class="form-control" />class="col-xs-12 lr-form-item">class="lr-form-item-title">联系地址"Address" type="text" class="form-control" />class="col-xs-12 lr-form-item">class="lr-form-item-title">备注
业务项目,至此搭建完成,接下来,使用Web项目进行引用,
配置业务项目数据表映射
<add key="DataMapper" value="Learun.Application.Mapping.dll,ShiQuan.Company.Mapping.dll"/>
配置业务项目数据库连接,添加配置功能菜单
运行系统效果
更多精彩,且听下回分解!