基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建

本节将介绍如何进行业务项目搭建。

本业务项目示例是简单的企业信息管理功能,业务项目采用Code First方式,搭建包括:

  1. 创建实体项目
  2. 创建实体数据表映射
  3. 创建业务处理项目
  4. 创建业务Web项目

搭建完项目效果:

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第1张图片

1、创建实体项目-ShiQuan.Company.Entity

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第2张图片

创建企业信息实体

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第3张图片

示例中企业信息包括:编号、名称、负责人、联系人、联系电话、联系地址等

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

创建空数据库

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第4张图片

创建项目

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第5张图片

创建企业信息数据表映射

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
        }
    }
}

创建实体数据库上下文

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第6张图片

选择空Code First 模型

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第7张图片

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 DbSet MyEntities { 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 对数据库进行升级更新

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第8张图片

 

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第9张图片

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第10张图片

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, Expressionbool>> 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(Expressionbool>> linq)
        {
            return this.BaseRepository(dbConn).IQueryable(linq);
        }
        /// 
        /// 获取实体
        /// 
        /// 主键值
        /// 
        public virtual T GetEntity(string keyValue)
        {
            return this.BaseRepository(dbConn).FindEntity(keyValue);
        }

        /// 
        /// 根据条件获取实体
        /// 
        /// Linq条件
        /// 
        public virtual T FindEntity(Expressionbool>> 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 Expressionbool>> QueryStringToExpression(Expressionbool>> 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 Expressionbool>> QueryStringToExpression(Expressionbool>> 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

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第11张图片

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第12张图片

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第13张图片

创建空的企业信息管理控制器,实现列表、编辑视图,数据查询、删除、保存方法。

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-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"/>

配置业务项目数据库连接,添加配置功能菜单

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第14张图片

运行系统效果

基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建_第15张图片

更多精彩,且听下回分解!

你可能感兴趣的:(基于.net EF6 MVC5+WEB Api 的Web系统框架总结(2)-业务项目搭建)