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项目
MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第1张图片 MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第2张图片
 
生成的解决方案的文件夹,对MVC的理解尚浅,不作过多的讲解,请多看看各位大侠们的博文,能受益匪浅。要真正理解框架的涵义,分层的优点,多动手,多感受,多思考。通过这几天的学习,感觉EF(Entity FrameWork)如它名字一样,是与Model层相关的,可生成实体对象。与Controll、View应该没直接联系,一开始容易和其它层混在一块,要分清概念和作用。(如理解不对乐意接受批评指正!)
MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第3张图片
安装EF6:
MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第4张图片 MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第5张图片
 

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

在Models文件夹上右键--添加--新建项
MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第6张图片
 
数据--ADO.NET实体数据模型
MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第7张图片
 
 如不能出现下图的选项,请下载安装 Entity Framework 6.1.0 Tools for Visual Studio 2012 & 2013下载地址: http://www.cnblogs.com/dotnetmvc/p/3644980.html
MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第8张图片
 选择新建连接
MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第9张图片
 
 
MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第10张图片
 点击更改,选择如下图
MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第11张图片
 
MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第12张图片
 
MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第13张图片
 
 选择我们需要生成数据模型的两个表
MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第14张图片
 
 完成后在Models文件夹下生成如下三个文件   其中ElementModel.cs为数据库连接上下文,也就是连接数据库用的,SysUser.cs和SysRole.cs为对应数据库表的数据实体模型。
 

 三、根据Model生成Controller及View

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

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

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

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

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

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

MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第19张图片

添加代码如下(用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>

 运行生成的界面如下:
  MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例_第20张图片
 

欢迎大家交流!

 

你可能感兴趣的:(sqlserver)