欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.Net MVC开发基础学习笔记(7):数据查询页面

程序员文章站 2022-04-14 10:16:48
前言 前面铺垫了那么多,今天我们就用mvc5 + ef6 + bootstrap3来正式创建一个基本查询页面。 为什么从查询页面开始?嘿嘿,因为小弟的.net生涯就是从查询页面开始的,记得正式工作的...

前言

前面铺垫了那么多,今天我们就用mvc5 + ef6 + bootstrap3来正式创建一个基本查询页面。

为什么从查询页面开始?嘿嘿,因为小弟的.net生涯就是从查询页面开始的,记得正式工作的第一个月就是各种模块的查询。先做查询有什么好处?首先查询只读数据,不写数据。对本身的数据安全不造成影响也不怕写入脏数据的麻烦。其次增删改查这四个操作里面,查询的难度应该是最小的,不用考虑事务流程等方面的问题。

本节最后将会生成如下页面:

ASP.Net MVC开发基础学习笔记(7):数据查询页面

创建model

关于model、数据库上下文、entity framework,本系列教程前面已经有介绍

在models文件夹下创建一个类,命名为worker.cs,这个类就是我们这里要用到的model。代码如下:

namespace slarkinc.models
{
    public enum sex
    {
        male, female
    }
    public class worker
    {
        public int id { get; set; }
        public string lastname { get; set; }
        public string firstname { get; set; }
        public sex sex { get; set; }
        public double? rating { get; set; }
    }
}

为了方便说明,加入行号,如果想要复制代码,请点击左上角的小图标就会出现不带行号的代码。在worker类的上面,第3行,创建了一个sex的枚举类型,保证sex只有male和female两种取值。9到13行中worker类用自动属性的方法定义了5个属性,其中rating属性前面有个问号表示这个属性是nullable,可以是null。

创建数据库上下文dbcontext

这里我们用code first方法创建数据库表。这个方法简单点说就是先创建model再根据model生成数据库表。

为了方便起见,这里用的数据库是visual studio自带的localdb。

数据库上下文,就是我们这里的数据访问层,根据model对数据库表进行不同的操作。因此我们首先在项目中创建一个数据访问层文件夹,命名为dal。然后,在dal文件夹中创建model对应的数据库访问上下文类,命名为companycontext。写入代码如下:

using system.data.entity;
using slarkinc.models;
using system.data.entity.modelconfiguration.conventions;

namespace slarkinc.dal
{
    public class companycontext : dbcontext
    {
        public companycontext()  : base("companycontext")
        {
        }

        public dbset workers {get;set;}

        protected override void onmodelcreating(dbmodelbuilder modelbuilder)
        {
            modelbuilder.conventions.remove();
        }
    }
}

因为我们这里数据库访问要用entity framework, 所以第1行要引入system.data.entity。第7行,我们的数据库上下文继承ef中的dbcontext基类。第9行表示

companycontext 继承基类dbcontext的构造函数。第13行表示我们的model worker和 companycontext中的数据集workers对应。第15到18行定义了一个事件

onmodelcreating,这个事件在我们使用的code first方法在数据库中创建数据表时触发。第17行的代码的作用是使我们创建出来的数据库表名字都是单数,不是复数。也就是说将来的数据库表名是worker而不是workers。这也是我们创建数据库表的习惯命名方法。

然后在web.config文件里面加入这个数据库上下文要用到的数据库连接字符串。如下面的代码所示,在web.config文件中找到元素。然后在元素内找到 元素。最后在元素内加入如下元素。


  
    
  


这样我们的数据库上下文companycontext就可以用这个连接字符串来访问数据库了。解释一下元素里的内容。name="companycontext"是连接字符串的名字,这个要和companycontext.cs 里的base("companycontext")函数的参数一样,这样初始化数据库上下文的时候才能读到字符串。data source=(localdb)\v11.0表示使用的数据库种类和版本。catalog=company是数据库的名字。integrated security=sspi是验证方式。attachdbfilename=|datadirectory|\company.mdf表示在我们这里,数据库文件存在 ~\app_data\company.mdf 下。providername="system.data.sqlclient"表示我们这里要用的数据库连接器,或者叫数据库驱动。

然后我们还要在web.config中声明数据库上下文。在中找到元素。在元素中找到元素。在元素中写入如下元素。


    
      
      
    


type="slarkinc.dal.companycontext, slarkinc"中的slarkinc.dal.companycontext表示这个companycontext的namespace和类名。逗号后面的slarkinc表示这个companycontext在slarkinc.dll中。

这样我们就把companycontext添加到了entity framework的上下文中。

创建初始化数据

为了方便测试,我们需要在数据库创建好之后给其中添加一些数据。因此我们来创建一个数据初始化类来做这个工作。在dal文件夹中创建一个类,命名为companyinitializer.cs。写入如下代码:

using system.collections.generic;
using slarkinc.models;

namespace slarkinc.dal
{
    public class companyinitializer : system.data.entity.dropcreatedatabasealways
    {
        protected override void seed(companycontext context)
        {
            var students = new list
            {
                new worker{firstname="andy",lastname="george",sex = sex.male},
                new worker{firstname="laura",lastname="smith",sex = sex.female},
                new worker{firstname="jason",lastname="black",sex = sex.male},
                new worker{firstname="linda",lastname="queen",sex = sex.female},
                new worker{firstname="james",lastname="brown", sex = sex.male}
            };
            students.foreach(s => context.workers.add(s));
            context.savechanges();
        }
    }
}

第6行,我们的数据初始化类继承了一个名为dropcreatedatabasealways的泛型类,这个类的作用就像它的名字,每次程序运行时都会删除并重新创建数据库,这样方便我们测试。第8到20行,就是初始化数据的函数,重写了父类的seed函数,并接受companycontext 作为数据库上下文供我们操作。第18行用linq语法将 students的数据添加到数据库上下文的数据集中。第19行,将这些数据提交到数据库。

然后要在web.config文件中配置这个初始化器。在刚才配置过的中写入如下所示的databaseinitializer即可。


   
      
   


type="slarkinc.dal.companyinitializer, slarkinc"中的slarkinc.dal.companyinitializer表示这个companyinitializer的namespace和类名。逗号后面的slarkinc表示这个companyinitializer在slarkinc.dll中。

这样我们的初始化器就完成了。

创建controller

controller没学好的同学-5-get-started-controller.html" target="_blank">请猛戳我!

在controllers文件夹下创建一个controller选择"mvc 5 控制器 - 空",命名为companycontroller.cs。写入代码如下:

using system.linq;
using system.web.mvc;
using slarkinc.dal;
namespace slarkinc.controllers
{
    public class companycontroller : controller
    {
        private companycontext db = new companycontext();
        public viewresult index()
        {
            return view(db.workers.tolist());
        }
    }
}

为了使用之前创建的model和数据库上下文,在第3行引入dal命名空间并在第9行初始化companycontext。在第12行创建index action返回类型是viewresult,那么用户请求就会返回一个view页面。然后在第12行把所有的数据传递给view。第12行tolist方法是把数据以list的形式输出。

创建view

要创建companycontroller的index action对应的view,首先在views文件夹下创建company文件夹。然后在company文件夹下创建一个空视图并选择使用布局页。命名为index.cshtml。写入如下代码:

@model ienumerable@html.displaynamefor(model => model.firstname)@html.displaynamefor(model => model.lastname)@html.displaynamefor(model => model.sex)@html.displaynamefor(model => model.rating)