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

通过最近一段时间对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>

 运行生成的界面如下:
 
 

欢迎大家交流!

 

MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例的更多相关文章

  1. SQLServer之多表联合查询

    多表联合查询简介 定义:连接查询是关系型数据库最主要的查询,通过连接运算符可以实现多个表连接数据查询. 分类:内连接,外连接,全外连接. 内连接 定义 内联接使用比较运算符根据每个表的通用列中的值匹配 ...

  2. Sqlserver 数据库、表常用查询操作

    查询所有表以及记录数: select a.name as 表名,max(b.rows) as 记录条数 from sysobjects a ,sysindexes b where a.id=b.id ...

  3. 如何查看SQLServer数据库每个表占用的空间大小?

    如何查看SQLServer数据库每个表占用的空间大小? 创建存储过程: CREATE PROCEDURE [dbo].[sys_viewTableSpace]AS BEGIN SET NOCOUNT ...

  4. sqlServer数据库纵横表相互转化

    sqlServer  数据库纵横表相互转化 一.纵表转横表: 1.纵表: 2.横表: 3. 代码: select Name as '姓名', end) as '语文', end) as '数学', e ...

  5. 【SqlServer系列】表单查询

    1   概述 如下几个问题,如果你能解决,请继续往下看,若不能解决,请先复习SQL基础知识,再来阅读本篇文章.本篇文章深度中等左右. Q1:表StudentScores如下,用一条SQL语句查询出每门 ...

  6. MVC5 + EF6 简单示例

    本文所使用的软件及环境: Visual Studio Ultimate 2013 (下载地址:http://www.visualstudio.com/downloads/download-visual ...

  7. MVC5+EF6入门教程——实现动态创建数据库与登录验证

    详细步骤 创建文件夹,规划好项目目录 创建相关实体类 (Data Model) 创建 Database Context 创建Initializer, 使用EF初始化数据库,插入测试数据 实现数据库登录 ...

  8. Sqlserver数据库 通过表触发器 实时通知应用程序

    /* Sqlserver数据库开始相关服务 以下示例显示了如何查看 OLE Automation Procedures 的当前设置.0未启用 */ EXEC sp_configure 'show ad ...

  9. SQL Server -----创建sqlserver 数据库 、表

    新建数据库 1.右击  选择新建数据库 2.起一个名字   选择保存位置 3.放在之前建好的的文件夹中 点击确定 4.都要选择好 点击确定 5.确定之后如图 6.新建表 7.见一个表,常说的要满足三大 ...

随机推荐

  1. Android使用文件存储数据

    Android上最基本的存储数据的方式即为使用文件存储数据,使用基本的Java的FileOutStream,BufferedWriter,FileInputStream和BufferedReader即 ...

  2. 日常笔记 ---- 图形学-Frenel函数材质球实现方式

    图形学-Frenel函数材质球实现方式   调个材质 大概公式 自发光= 自定义边光颜色* ((1-法线与视角方向点乘)的 自定义幂次方 ) 这个是比较简单方法   模型的法线与视角方向 角度越大 表 ...

  3. linux命令:less

    1.命令介绍: less用来逐页输出文件内容,less相比more功能更加强大,less可以前后翻页,前后搜索. 2.命令格式: less [选项] 文件 3.命令参数: -b <缓冲区大小&g ...

  4. 百度之星热身赛-1001(dfs拓扑排序)

    题意:作为年度优秀魔法学员的奖赏,哈利得到了一台具有魔力的计算机.这台计算机一旦开始处理某个任务,就会一直处理到这个任务结束为止(所以你可以认为它是单线程的).有一天,这台计算机得到了n个任务要处理, ...

  5. 传智播客JavaWeb day07、day08-自定义标签(传统标签和简单标签)、mvc设计模式、用户注册登录注销

    第七天的课程主要是讲了自定义标签.简单介绍了mvc设计模式.然后做了案例 1. 自定义标签 1.1 为什么要有自定义标签 前面所说的EL.JSTL等技术都是为了提高jsp的可读性.可维护性.方便性而取 ...

  6. php轮流排序,每隔一定的时间轮流进行位置排序,轮询的排行榜:function dataPollingInterval()

    /* * @名称: php ,对数组每隔一定的时间(自设定时间)来轮流进行位置排序,轮询的排行榜. 精确到指定的秒 或 分钟 或 小时 或 天 ,对数据列表进行轮排. * @参数: (array)$l ...

  7. day15_集合第一天

    1.集合体系 红色为今天所学 Collection                          (接口)|--List                       (接口) 元素有序,可以重复 ...

  8. Eclipse Java 调试基本技巧

    前言 这一部分是Eclipse中最为重要的部分.调试的重要性想必大家都清楚. 调试无疑是做项目最苦比的事情,但优秀的编码习惯,良好的调试方式能让这没那么苦,甚至还有点乐趣:). 本文讲解使用Eclip ...

  9. tomcat切割日志的shell脚本

    #!/bin/bash cd /usr/tomcats/ d=`date +%F` m1=`date -d'1 month ago' +%F` ` do cd tomcat808"$i&qu ...

  10. JS判断是否来自手机移动端的访问,并跳转

    var browserName_ = navigator.userAgent ; &&browserName_.indexOf(&&browserName_.index ...