• MVC5+EF6简单实例---以原有SQLServer数据库两表联合查询为例


    工具: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>

  • 相关阅读:
    26 转义符 re模块 方法 random模块 collection模块的Counter方法
    25 正则表达式
    24 from 模块 import 名字
    24 from 模块 import 名字
    24 from 模块 import 名字
    23 析构方法 items系列 hash方法 eq方法
    21 isinstance issubclass 反射 _str_ _new_ _len_ _call_
    20 属性, 类方法, 静态方法. python2与python3的区别.
    python(1)
    python之字符串格式化
  • 原文地址:https://www.cnblogs.com/lacey/p/6396639.html
Copyright © 2020-2023  润新知