zoukankan      html  css  js  c++  java
  • MVC5+EF6简单实例以原有SQLServer数据库两表联合查询为例

    有二三年没写代码了,**内的工作就是这样,容易废人!看到园子里这么多大侠朝气蓬勃的,我想也要学点东西并和大家分享,共同进步!快乐每一天,进步每一天!言归正传!

    通过最近一段时间对MVC5、EF6的学习,可以简单的做一个小例子,其中涉及到EF读取已有数据库中的数据,并对两个表进行联合查询,显示数据。

    工具:VS.net2013、EF6、MVC5、SQLServer2008

    参考出处:

    http://www.cnblogs.com/slark/p/mvc-5-get-started-create-project.html

    http://www.cnblogs.com/miro/p/4288184.html

    http://www.cnblogs.com/dotnetmvc/p/3732029.html

     一、准备工作

    在SqlServer上创建数据库:Element

    模拟两个表并插入数据:SysUser(用户表)、SysRole(角色表)

    CREATE TABLE [dbo].[SysUser](
     [ID] [int] IDENTITY(1,1) NOT NULL,
     [Name] [nchar](10) NOT NULL,
     [RoleNum] [nchar](10) NOT NULL
    ) ON [PRIMARY]

    CREATE TABLE [dbo].[SysRole](
     [ID] [int] IDENTITY(1,1) NOT NULL,
     [RoleName] [nchar](10) NOT NULL,
     [RoleNum] [nchar](10) NOT NULL
    ) ON [PRIMARY]

    插入数据:

    二、新建MVC项目
     
    生成的解决方案的文件夹,对MVC的理解尚浅,不作过多的讲解,请多看看各位大侠们的博文,能受益匪浅。要真正理解框架的涵义,分层的优点,多动手,多感受,多思考。通过这几天的学习,感觉EF(Entity FrameWork)如它名字一样,是与Model层相关的,可生成实体对象。与Controll、View应该没直接联系,一开始容易和其它层混在一块,要分清概念和作用。(如理解不对乐意接受批评指正!)
    安装EF6:
     

    二、使用EF的Code First从原有数据库中生成Models

    在Models文件夹上右键--添加--新建项
     
    数据--ADO.NET实体数据模型
     
     如不能出现下图的选项,请下载安装Entity Framework 6.1.0 Tools for Visual Studio 2012 & 2013下载地址:http://www.cnblogs.com/dotnetmvc/p/3644980.html
     选择新建连接
     
     
     点击更改,选择如下图
     
     
     
     选择我们需要生成数据模型的两个表
     
     完成后在Models文件夹下生成如下三个文件  其中ElementModel.cs为数据库连接上下文,也就是连接数据库用的,SysUser.cs和SysRole.cs为对应数据库表的数据实体模型。
     

     三、根据Model生成Controller及View

     在Controllers文件夹上右键--添加--控制器

     
     输入控制器名称、选择模型类、数据库上下文(以SysUser模型为例)
     
     
     完成后在Controllers文件夹下生成SysUserController.cs,SysUserController的作用就是接收View层的action(动作),然后到相应的model层进行的数据交互,再把结果返回给View。
    同样,在Views文件夹下也生成了SysUser文件夹,里面对应着五个视图页面的CShtml文件。右键Index.cshtml--在浏览器中查看,显示如下页面:
     
     

    四、利用ViewModel显示多表联合查询

     刚刚我们通过controller把从一个表SysUser中查询的数据以SysUser(Model)实体的形式返回给Index(View)显示,而在实际工作中我们需要联合查询多个表中的数据并在View中显示。那个我们就需要借助于ViewModel,ViewModel是更接近于View的实体模型,也就是我们根据View中所要显示的数据的需要来建立实体模型。而Model更接近于数据库实体。下面我们就实现一个简单的两表联合查询的小例子:查询出SysUser表中的用户名及它所对应的角色名。
     
    右键解决方案--添加--新建文件夹(ViewModel),然后右键ViewModel文件夹--添加--类
     
     
    新建UserRole类,并添加实体如下:

    namespace MVCDemo.ViewModels
    {
        public class UserRole
        {
            public string userName { get; set; }
            public string userRole { get; set; }
        }
    }

    右键Controllers文件夹添加控制类,此类继承于Controller类

    添加代码如下(用Linq to Entity两表联合查询):

    using System;

    using System.Collections.Generic;

    using System.Linq; using System.Web;

    using System.Web.Mvc; using System.Data.Entity;

    using MVCDemo.ViewModels;

    using MVCDemo.Models;

    namespace MVCDemo.Controllers

    {    

      public class UserRoleController : Controller    

      {        

        ElementModel db = new ElementModel();

              public ActionResult Index()        

        {            

          var userRoleList = from uu in db.SysUsers                               

            join ud in db.SysRoles on uu.RoleNum equals ud.RoleNum                               

            where uu.ID == 1                               

            select new UserRole {userName = uu.Name,userRole = ud.RoleName}            

          return View(userRoleList);        

        }    

      }

    }

     右键Views文件夹,新建UserRole文件夹;右键UserRole文件夹,添加--带有布局的MVC5视图页Index.cshtml,添加代码如下:

    @model IEnumerable<MVCDemo.ViewModels.UserRole>

    @{    

      Layout = "~/Views/Shared/_Layout.cshtml";

      }

    <table class="table">    

    <tr>        

       <th>            

        @Html.DisplayNameFor(model=>model.userName)

            </th>

            <th>

                @Html.DisplayNameFor(model => model.userRole)

            </th>

            <th></th>

        </tr>

          @foreach (var item in Model)

        {       

      <tr>          

       <td>                

    @Html.DisplayFor(modelItem => item.userName)

                </td>           

         <td>

                    @Html.DisplayFor(modelItem => item.userRole)

                </td>  

           </tr>    

    }

    </table>

     运行生成的界面如下:
     
     

    欢迎大家交流!

     
  • 相关阅读:
    附加作业
    个人总结
    wordcount
    vs2013安装及测试
    结对作业电梯调度问题
    阅读下面程序,请回答如下问题:
    补作业:随机生成二元四则运算
    软件工程的认识
    结对编程完结
    结对编程加团队编程
  • 原文地址:https://www.cnblogs.com/wgying/p/4363003.html
Copyright © 2011-2022 走看看