加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 13:44:52 所属栏目:MsSql教程 来源:网络整理
导读:http://www.cnblogs.com/lacey/p/6396639.html ? 工具: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/dotn

http://www.cnblogs.com/lacey/p/6396639.html

?

工具: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,
?[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>

好文要顶? 关注我? 收藏该文?

?

饮水思源^0^
关注 - 1
粉丝 - 0 +加关注 0 0 ??上一篇: C#精髓 第四讲 GridView 72般绝技
??下一篇: sql去掉换行符

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读