.net MVC5+EF6+bootstrap搭建框架,从入门到精通(一)——之简单增删改查

.net MVC5+EF6+bootstrap搭建框架,从入门到精通(一)

一、前言废话

心血来潮把以前用过的知识来个系统的整理,教你一步步熟悉.net MVC希望能给自己和别人带来帮助,关注绝望的zzk,让你的编码人生不再绝望!

创建项目

.net mvc 搭建三层:

  1. 搭建基本框架 ,搭建DAL BLL Model都是类库 UI选mvc;在这里插入图片描述
    在这里插入图片描述
  2. 直接生成实体数据模型 如下图,Model层右键新建实体数据模型;在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
  3. DAL层引用Model新增BaseDal,BaseDbContext两个类
    BaseDal.cs代码
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;

namespace zzkMvc.DAL
{
   /// <summary>
   /// 负责操作数据库中的所有表的普通增,删,查,改操作的
   /// </summary>
   /// <typeparam name="TEntity"></typeparam>
   public class BaseDal<TEntity> where TEntity : class
   {
       //1.0实例化EF上下文容器对象
       BaseDBContext db = new BaseDBContext();

       DbSet<TEntity> _dbset;

       public BaseDal()
       {
           //初始化
           _dbset = db.Set<TEntity>();
       }

       #region 查询
       public List<TEntity> Query(Expression<Func<TEntity, bool>> where)
       {
           return _dbset.Where(where).ToList();
       }

       public List<TEntity> QueryJoin(Expression<Func<TEntity, bool>> where, string[] tableNames)
       {
           //将子类_dbset 赋值给父类的query
           DbQuery<TEntity> query = _dbset;

           foreach (var item in tableNames)
           {
               //遍历要连表的表名称,最终得到所有连表以后的DbQuery对象
               query = query.Include(item);
           }
           return query.Where(where).ToList();
       }
       #endregion

       #region 新增
       public void Add(TEntity model)
       {
           _dbset.Add(model);
       }
       #endregion

       #region 编辑
       public void Edit(TEntity model, string[] propertyName)
       {
           if (model == null)
           {
               throw new Exception("model必须为实体的对象");
           }
           if (propertyName == null || propertyName.Any() == false)
           {
               throw new Exception("必须至少指定一个要修改的属性");
           }

           //将model追加到EF容器
           DbEntityEntry entry = db.Entry(model);

           entry.State = EntityState.Unchanged;

           foreach (var item in propertyName)
           {
               entry.Property(item).IsModified = true;
           }
       }
       #endregion

       #region 物理删除
       //EntityState.Unchanged
       public void Delete(TEntity model, bool isAddedEFContext)
       {
           if (isAddedEFContext == false)
           {
               _dbset.Attach(model);
           }
           //修改状态为deleted
           _dbset.Remove(model);
       }
       #endregion

       #region 统一执行保存
       public int SaveChanges()
       {
           return db.SaveChanges();
       }
       #endregion

   }
}

BaseDBContext.cs代码

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace zzkMvc.DAL
{
   /// <summary>
   /// 自定义的EF上下文容器类
   /// </summary>
   public class BaseDBContext : DbContext
   {
       /// <summary>
       /// 负责根据指定的数据库链接字符串,初始化EF
       /// </summary>
       //此处name值在Model层的App.config中查找
       public BaseDBContext() : base("name=zzkMvcEntities") { }
   }
}

新建tb_staffDal继承BaseDal,tb_staffDal.cs代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using zzkMvc.Model;

namespace zzkMvc.DAL
{
//此处继承BaseDal
   public class tb_staffDa:BaseDal<tb_staff>
   {
   }
}

  1. BLL层引用Model、Dal 新建BaseBll.cs初始化BaseDal;
    BaseBll.cs代码如下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using zzkMvc.DAL;

namespace zzkMvc.BLL
{
   public class BaseBLL<TEntity> where TEntity : class
      {
          //初始化BaseDal泛型类的对象
          BaseDal<TEntity> bdal = new BaseDal<TEntity>();
       #region 查询
       public List<TEntity> Query(Expression<Func<TEntity, bool>> where)
       {
           return bdal.Query(where);
       }

       public List<TEntity> QueryJoin(Expression<Func<TEntity, bool>> where, string[] tableNames)
       {
           return bdal.QueryJoin(where, tableNames);
       }
       #endregion

       #region  新增

       public void Add(TEntity model)
       {
           bdal.Add(model);
       }

       #endregion

       #region  编辑

       /// <summary>
       /// 要求:model必须是自己定义的实体,此时没有追加到EF容器中
       /// </summary>
       /// <param name="model"></param>
       public void Edit(TEntity model, string[] propertyName)
       {
           bdal.Edit(model, propertyName);
       }

       #endregion

       #region  物理删除

       /// <summary>
       /// model必须是自己定义的,一般是按照主键来删除
       /// </summary>
       /// <param name="model">要删除的实体对象</param>
       /// <param name="isAddedEFContext">true:表示model以及追加到了ef容器,false:未追加</param>
       public void Delete(TEntity model, bool isAddedEFContext)
       {
           bdal.Delete(model, isAddedEFContext);
       }

       #endregion

       #region 统一执行sql语句

       public int SaveChanges()
       {
           return bdal.SaveChanges();
       }

       #endregion

   }
}

新建tb_staffBll.cs继承BaseBll,代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using zzkMvc.Model;

namespace zzkMvc.BLL
{
   public class tb_staffBll:BaseBLL<tb_staff>
   {
   }
}

  1. 安装entityframework工具——nuget包;
    在这里插入图片描述在这里插入图片描述

  2. 修改UI层的web.config 打开Model层的App.config找到下图代码复制到UI层的web.config中;
    在这里插入图片描述

  3. 至此框架基本搭建完毕,下面开始用.net mvc 写几个页面实现对数据库的增删改查

新建一个视图页,实现简单的列表查询

新建一个Test()右键添加视图,如下图所示
在这里插入图片描述在这里插入图片描述
Test()代码如下:


        zzkMvcEntities zzkmvc = new zzkMvcEntities();
        tb_staffBll cbll = new tb_staffBll();
        //简单的查询
        public ActionResult Test()
        {
            传统Tsql
            SqlParameter[] parameters = {
                    new SqlParameter("@userName", SqlDbType.NVarChar,50),
                    new SqlParameter("@loginTime", SqlDbType.DateTime),
                    new SqlParameter("@email", SqlDbType.NVarChar,30),
                    new SqlParameter("@sex", SqlDbType.Bit,1),
                    new SqlParameter("@roleid", SqlDbType.TinyInt,1),
                    new SqlParameter("@groupID", SqlDbType.Int,4),
                    new SqlParameter("@Remark",SqlDbType.NVarChar,-1)
                    };
            parameters[0].Value = "";
            parameters[1].Value = "";
            parameters[2].Value = "";
            parameters[3].Value = "";
            parameters[4].Value = "";
            parameters[5].Value = "";
            parameters[6].Value = "";
            //SqlParameter[] parameters = {
            //new SqlParameter("@Name", SqlDbType.NVarChar, 50)
            //        };
            //parameters[0].Value = "张三";
            //var model2 = zzkmvc.Database.SqlQuery<tb_staff>("select * from tb_staff where Name=@Name",parameters).ToList();
            //return View(model2.ToList());


            //linq to entityframwork查询
            //var users2 = zzkmvc.tb_staff.Where<tb_staff>(user => user.Name != "ls" || user.Phone != "").ToList();//简单查询&&
            //return View(users2);
            //复杂l2e
            //using (var dbContext = new zzkMvcEntities())
            //{
            //    IQueryable<tb_staff> iqm = dbContext.tb_staff;
            //    iqm = iqm.Where(user => user.Name != "ls" || user.Phone != "");
            //    iqm = iqm.Where(user => user.Phone != "ls");
            //    iqm = iqm.Where(user => user.Nationality != "美国" || user.Salary == 5000.00);
            //    return View(iqm.ToList());
            //    //select * from tb_staff where (Name != "ls" || Phone != "") and (Phone != "ls") and (Nationality != "美国" || Salary == "5000.00")
            //}

            //linq
            var user = from r in zzkmvc.tb_staff
                       where (r.Phone != "ls" && r.Nationality=="美国") || r.Salary==5000.00
                       select r;
            return View(user.ToList());
        }

前台页Test.cshtml代码,此页是上一步添加视图生成的

@model IEnumerable<zzkMvc.Model.tb_staff>

@{
    ViewBag.Title = "Test";
}

<h2>Test</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Name)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Sex)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Age)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Phone)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Salary)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Nationality)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Sex)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Age)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Phone)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Salary)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Nationality)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
            @Html.ActionLink("Details", "Details", new { id=item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.Id })
        </td>
    </tr>
}

</table>

增、删、改

HomeController.cs后台页增删改相关代码


        public ActionResult Add()
        {
            return View();
        }
        public ActionResult Edit(int id)
        {
            var user = cbll.Query(c => c.Id == id).ToList()[0];
            return View(user);
        }
        [HttpPost]
        public ActionResult Update()
        {
            var id = Convert.ToInt32(Request["Id"]);
            var userName = Request["Name"];
            if (userName != "" && userName != null)
            {
                var user = cbll.Query(c => c.Id == id).ToList()[0];

                //修改
                user.Name = userName;
                cbll.SaveChanges();
                //return View("Index",cbll.Query(c => c.RealName.Contains("张")).ToList());
                return Redirect("~/home/Test");
            }
            return Redirect("~/home/Edit?id=" + id);
        }
        [HttpPost]
        public ActionResult AddEdit()
        {
            var Name = Request["Name"];
            var Sex = Request["Sex"];
            var Age = Request["Age"];
            var Phone = Request["Phone"];
            var Salary = Request["Salary"];
            var Nationality = Request["Nationality"];
            if (Name != "" && Name != null)
            {
                //新增测试:
                tb_staff model = new tb_staff()
                {
                    Name = Name,
                    Sex = Convert.ToBoolean(Sex),
                    Age = Convert.ToInt32(Age),
                    Phone = Phone,
                    Salary = (float)Convert.ToDouble(Salary),
                    Nationality = Nationality
                };
                cbll.Add(model);
                cbll.SaveChanges();
                return Redirect("~/home/Test");
            }
            return Redirect("~/home/Add");
        }
        public ActionResult Delete(int id)
        {
            var user = cbll.Query(c => c.Id == id).ToList()[0];

            //修改
            user.Name = "sansa";
            //删除
            //cbll.Delete(user, true);//执行sql语句 打开关闭了一次ado.net链接
            ///
            统一将上面的新增,编辑,删除分别生成insert,update,delete语句一次性发送给数据库执行
            cbll.SaveChanges();
            //return View("Index",cbll.Query(c => c.RealName.Contains("张")).ToList());
            return Redirect("~/home/Test");
        }

Add、Edit右键添加视图,如下
在这里插入图片描述在这里插入图片描述
Add.cshtml、Edit.cshtml,修改一下代码 就可以提交到后台了 ,如下
在这里插入图片描述
至此,.net mvc5+EF6+bootstrap三层框架搭建完毕,并实现基本的增删改查,赶紧打开vs开始吧,临渊羡鱼不如退而结网!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: nfine是一个使用C#语言的快速开发框架。它提供了一系列的工具和功能,帮助开发人员更加高效地创建和管理.NET应用程序。 首先,nfine提供了一个功能强大的代码生成器,可以根据数据库表格自动生成实体类、业务逻辑层和数据访问层的代码。通过使用代码生成器,开发人员可以节省大量的时间和精力,快速地建立起应用程序的基本框架。 其次,nfine还提供了一套完善的权限管理系统。通过该系统,开发人员可以方便地对用户、角色和权限进行管理,并通过角色的配置控制不同用户的访问权限。这样做可以保证应用程序的安全性,并且对权限的管理也变得更加简单高效。 此外,nfine还提供了一些常用的功能模块,如日志记录、异常处理、任务调度等。这些功能模块可以帮助开发人员更好地管理应用程序的各个方面,并提升应用程序的性能和稳定性。 最后,nfine采用了模块化的设计理念,使得开发人员可以将应用程序拆分成独立的模块进行开发。这种设计方式可以提高开发的灵活性和可维护性,使得团队合作更加容易。 综上所述,nfine快速开发框架是一个功能强大、易于使用的开发工具,它能够帮助开发人员更快地开发出高质量的.NET应用程序。无论是对于个人开发者还是团队开发者来说,nfine都是一个值得尝试的选择。 ### 回答2: nfine是一款快速开发框架,它是基于.NET技术栈的 web 开发框架。该框架具有简单易用的特点,为开发者提供了一套高效快速的开发工具和组件。 首先,nfine提供了一系列的代码生成工具,如代码生成器、表单设计器等,可以帮助开发者快速生成基础代码和界面布局。使用这些工具,开发者只需简单配置相关参数,就能生成带有基本增删改查功能的代码,大大减少了开发时间和人力成本。 其次,nfine内置了丰富的功能模块和扩展组件,如权限管理模块、报表生成器、工作流引擎等,可以满足各种常见的业务需求。这些功能模块和组件可以快速集成到项目中,省去了开发者自行实现的繁琐过程。 此外,nfine采用了模块化开发的架构,每个模块都是独立的,可以独立部署和升级,灵活性很高。开发者可以根据需要选择性地引入和使用某个模块,无需整个框架的依赖。 最后,nfine还提供了完善的技术文档和示例代码,供开发者学习和参考。它的社区活跃度也很高,开发者可以通过社区进行交流和分享,获取帮助和支持。 总体来说,nfine是一款功能强大、易用高效的快速开发框架。它能够帮助开发者快速构建稳定可靠的系统,提高开发效率,减少开发成本。无论是个人开发者还是团队,都能从nfine中获得便利和帮助。 ### 回答3: nfine快速开发框架(Nfine Rapid Development Framework)是一款基于Microsoft.NET平台的快速开发框架。它专注于帮助开发人员快速构建可靠、高效的企业级应用程序。 首先,nfine提供了丰富的模版和代码生成器,使开发人员能够快速生成业务代码。通过简单的配置,可以自动生成各种基础的功能模块,包括用户管理、权限管理、角色管理、部门管理等。这大大节省了开发时间,避免了重复劳动。 其次,nfine具有良好的可扩展性。开发人员可以根据实际需求,通过自定义模版和插件来扩展框架的功能。不论是添加新的业务模块,还是修改现有功能,都可以通过简单的配置和代码编写来实现。 另外,nfine还支持分布式部署和云平台。它可以轻松地与其他系统进行集成,无论是在本地服务器上部署还是在云平台上运行。这为企业提供了更大的灵活性和可扩展性,能够满足各种复杂的环境要求。 此外,nfine还提供了丰富的技术支持和文档资源。开发人员可以通过在线文档和社区论坛获取帮助和解决问题。这使得开发人员能够更好地利用nfine框架进行项目开发,并能够更快地解决遇到的技术难题。 总之,nfine快速开发框架是一款功能强大、易用性高的开发工具。它能够快速生成代码、提供可扩展性、支持分布式部署,并提供全面的技术支持。无论是初学者还是经验丰富的开发人员,都能够通过nfine快速开发框架来提高开发效率、降低开发成本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值