侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

一个简单MVC5 + EF6示例分享

php  /  管理员 发布于 8年前   205

本文所使用的软件及环境:

Visual Studio Ultimate 2013;

MVC5 + EF6 + .NET Framework 4.5 + LocalDB;Windows 7 x64 Professional

说明:

1.在EF (Entity Framework,以下简称EF6)框架下,操作数据的方式有三种:Database First, Model First, 以及 Code First,本文基于Code First创建。

2.本文是基于MVC5创建:

3.LocalDB

  • LocalDB是SQL Server Express数据库引擎的轻量级版本,其非常易于安装、配置、以命令行启动并运行在user model.
  • LocalDB以一种SQL Server Express特殊的执行模型运行,从而使得你能够以.mdf文件的方式来操作数据库。如果你想使得数据库具有随项目迁移的能力,你可以把LocalDB数据库文件放在web项目的App_Data文件夹下。
  • 在SQL Server Express中虽然你能够通过使用用户示例功能来达到操作.mdf文件的目的,但是这种做法是不推荐的,相反,LocalDB是被推荐的方式。在Visual Studio2012及随后的版本中,LocalDB随Visual Studio一起默认安装的。
  • 通常来说SQL Server Express并不会被用于Web应用程序的生产环境,同样地,LocalDB由于其并不是针对IIS而设计的也不被推荐使用于生产环境。

一、创建基于MVCWeb Application

  在正式开始之前,先看一下VS 2013的启动界面,是不是有点冷酷的感觉

好了,言归正传,首先按如下截图创建

创建完成后,我们对网站的风格做些微调,以便能契合应用主题

Views\Shared\_Layout.cshtml做如下更改(请看黄色高亮部分)

<!DOCTYPE html><html><head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>@ViewBag.Title - Contact</title>@Styles.Render("~/Content/css")@Scripts.Render("~/bundles/modernizr")</head><body><div class="navbar navbar-inverse navbar-fixed-top"><div class="container"><div class="navbar-header"><button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></button>@Html.ActionLink("Contact", "Index", "Home", null, new { @class = "navbar-brand" })</div><div class="navbar-collapse collapse"><ul class="nav navbar-nav"><li>@Html.ActionLink("Home", "Index", "Home")</li><li>@Html.ActionLink("About", "About", "Home")</li><li>@Html.ActionLink("Contacts", "Index", "Contact")</li><li>@Html.ActionLink("Groups", "Index", "Group")</li></ul></div></div></div><div class="container body-content">@RenderBody()<hr /><footer><p>© @DateTime.Now.Year - Contact</p></footer></div>@Scripts.Render("~/bundles/jquery")@Scripts.Render("~/bundles/bootstrap")@RenderSection("scripts", required: false)</body></html>Views\Home\Index.cshtml 替换成如下内容@{ViewBag.Title = "Home Page";}<div class="jumbotron"><h1>Contact</h1></div><div class="row"><div class="col-md-4"><h2>Welcome to Contact</h2><p>Contact is a sample application thatdemonstrates how to use Entity Framework 6 in anASP.NET MVC 5 web application.</p></div><div class="col-md-4"><h2>Build it from scratch</h2><p>You can build the application by following the steps in the tutorial series on the following site.</p><p><a class="btn btn-default" href="http://www.cnblogs.com/panchunting/p/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application.html">See the tutorial »</a></p></div></div>

运行看一下效果吧

安装EF6

创建数据模型

在Models文件夹下,分别创建Contact.cs、Enrollment.cs、Group.cs三个类

using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace PCT.Contact.Models{ public class Contact {  public int ID { get; set; }  public string Name { get; set; }  public DateTime EnrollmentDate { get; set; }  public virtual ICollection<Enrollment> Enrollments { get; set; } }}using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace PCT.Contact.Models{ public class Enrollment {  public int EnrollmentID { get; set; }  public int ContactID { get; set; }  public int GroupID { get; set; }  public virtual Contact Contact { get; set; }  public virtual Group Group { get; set; } }}using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace PCT.Contact.Models{ public enum GroupName {  Friend, Family, Colleague, Schoolmate, Stranger } public class Group {  public int GroupID { get; set; }  public GroupName? GroupName { get; set; }  public virtual ICollection<Enrollment> Enrollments { get; set; } }}

PS:发现VS 2013有一个自动提示reference,是不是很方便啊

创建Database Context

  在PCT.Contact项目下新建文件夹DAL(Data Access Layer),继而继续新建CommunicationContext.cs

  悲剧啊,由于类Contact和项目名称Contact重复,不得不写全称啊,以后注意。

  继续在DAL目录下创建CommunicationInitializer.cs

  为了通知EF使用你创建的initializer class,在项目的web.config中添加entityFramework节点

 <entityFramework> <contexts>  <context type="PCT.Contact.DAL.CommunicationContext, PCT.Contact">  <databaseInitializer type="PCT.Contact.DAL.CommunicationInitializer, PCT.Contact" />  </context> </contexts> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers>  <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework>

在项目web.config中添加connectionstrings(在appSettings之上)

 <connectionStrings> <add name="CommunicationContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=ContactCommunication;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/> </connectionStrings>  <appSettings> <add key="webpages:Version" value="3.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings>

  

运行结果

查看LocalDB

希望本文可以对大家学习有所帮助。


  • 上一条:
    Spring MVC之DispatcherServlet
    下一条:
    利用 FormData 对象和 Spring MVC 配合实现Ajax文件下载功能
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客