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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM