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

通过最近一段时间对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. HDU 5360 (贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意:告诉你n个区间[ l[i],r[i] ],然后让你排序,必须左区间不大于它前边的总区间个数 ...

  2. React Native组件之Text

    React Native组件之Text相当于iOS中的UILabel. 其基本属性如下: /** * Sample React Native App * https://github.com/face ...

  3. 黑马程序员:Java编程_面向对象

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 面向对象和面向过程都是一种思想,面向过程强调的是功能行为,面向对象是将功能封装进 ...

  4. C语言处理xml文件的库

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...

  5. Svn服务器的安装和配置

    1.安装svn服务器端软件 从镜像服务器或者YUM源下载安装SVN服务器软件:yum install subversion mkdir /usr/local/svn     //创建SVN安装目录 c ...

  6. oracle字符函数

    UPPER(char) 小写转大写 LOWER(char) 大写转小写 INITCAP(char) 首字母转换 SUBSTR(char,[m[,n]]) 截取字符串函数 从源字符串char的m开始截取 ...

  7. 在Bootstrap中 强调相关的类

    .text-muted:提示,使用浅灰色(#999) .text-primary:主要,使用蓝色(#428bca) .text-success:成功,使用浅绿色(#3c763d) .text-info ...

  8. LeetCode() Word Search II

    超时,用了tire也不行,需要再改. class Solution { class TrieNode { public: // Initialize your data structure here. ...

  9. chrome 49 版本 跨越 --args --disable-web-security --user-data-dir

    转载: 做前端的,用Ajax获取数据,是常有的事情,同域下自然没问题了,如果是不同域获取数据,浏览器就有个同源策略的限制. 如图: Origin * is not allowed by Access- ...

  10. 适配器模式(Adapter Pattern)

    将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 模式中的角色 目标接口(Target):客户所期待的接口.目标可以是具体的或 ...