MvcMovieStore mvc5.0,EF6.01
MVC 5 实例教程(MvcMovieStore 新概念版:mvc5.0,EF6.01) - 4、创建数据上下文和数据实体模型
说明:MvcMovieStore项目已经发布上线,想了解最新版本功能请登录 MVC影视(MvcMovie.cn) 进行查阅。如需转载,请注明出处:http://www.cnblogs.com/DoduNet/
上一章我们讨论了如何创建项目和添加/更新程序包,这一章我们讨论一下如何创建数据上下文和数据实体模型;当然,MVC的运行模式大家应该都很清楚,MVC 表示 模型-视图-控制器。MVC 是一种用于应用程序开发的框架,基于 MVC 应用程序中包含:
- Models: 表示应用程序的数据和使用验证逻辑来强制执行业务规则的数据的类。
- Views: 您的应用程序用来动态生成 HTML 响应的模板文件。
- Controllers: 处理传入的浏览器请求的类中检索模型数据,然后指定将响应返回到浏览器中的视图模板。
至于如何添加 控制器、模型、视图这些概念在【译】ASP.NET MVC 5 官方教程这个系列教程中都有详细提到,所以我们并不作为主要讲解内容,在以后的过程中也都会涉及到。
现在我们再来看一下Code First,Code First最原始的原型实际上被叫做只有代码(Code Only)。这是因为开发者只需要写代码,将会自动创建模型和数据库。是因为有一个特别的类(继承与System.Data.Entity.DbContext),这个类就是我们即将要谈到的数据上下文,而数据上下文又与我们在Web.config中设置的数据连接字符串相对应,数据连接配置 和 数据上下文的关系,这里不作过多阐述。
创建数据上下文:
打开我们上节中已经创建好的项目,可以在解决方案资源管理器中看到如下图所示的IdentityModels.vb这个文件,如下图所示:
从文件名我们大概可以理解为:身份模型,顾名思义就是说这个文件中应该是与我们这个项目所使用的身份认证有关的类或者设置。打开之后我们可以看到两个类:
1 Imports Microsoft.AspNet.Identity.EntityFramework
2
3 ' You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
4 Public Class ApplicationUser
5 Inherits IdentityUser
6 End Class
7
8 Public Class ApplicationDbContext
9 Inherits IdentityDbContext(Of ApplicationUser)
10 Public Sub New()
11 MyBase.New("DefaultConnection")
12 End Sub
13 End Class
ApplicationUser:应用程序用户,ApplicationDbContext:应用程序数据上下文;
不错,项目默认已经为我们创建好了数据上下文,你可能会问现在这个类怎么不是继承的System.Data.Entity.Dbcontext呀?,那么,我们在IdentityDbContext处点击右键,选择转到定义,如下图所示:
之后会在工作区打开“对象浏览器”窗口,从这里可以很清楚的看出,IdentityDbContext的继承关系,没看错,他就是继承的System.Data.Entity.Dbcontext;如下图所示:
也就是说,我们的项目中已经有了一个数据上下文存在,那么我还需要再创建一个吗?,对于我们现有的项目,不需要多个数据库,一个就够我们用的了,所以答案是,不需要!需要的是我们对此进行扩充。我们现在来运行一下项目,看看这个数据上下文是不是真的有效。按F5运行项目,等待打开浏览器……,如下图所示:
我们在项目的web.config中默认提供了数据连接字符串,根据字符串我们知道数据库的位置应该是在项目根目录的app_Data文件夹,点击导航栏中的“注册”,并完成表单注册一个用户(想验证刚才提到的数据上下文是否有效,需要页面操作涉及到数据模型的操作时,mvc才会通过数据上下文自动创建数据库),如下图所示:
如注册成功后,会自动登陆,并转到首页,当看到导航栏右侧有欢迎词语时,说明我们已经注册成功!如下图所示:
那么打开App_Data文件夹,你就会发现多出来了两个文件:
- aspnet-MvcMovieStore.Web-20131104112149.mdf
- aspnet-MvcMovieStore.Web-20131104112149_log.ldf
bingo,你猜对了,这个数据上下文是正常工作的,只不过ApplicationDbContext 继承与IdentityDbContext(Of ApplicationUser)这个类就是添加了身份认证功能,关于Aspnet.Identity 身份认证功能我们在后面的章节中会详细阐述。而现在我们完全可以使用这个数据上下文来完成我们之后的操作,仅仅需要的是我们对该数据上下文进行扩充,至于扩充的属性,我们等创建数据实体模型后再讲。
创建数据实体模型:
在 原创:MVC 5 实例教程(MvcMovieSore 新概念版:mvc5.0,EF6.01) - 2、数据框架 和 功能预览 中我有贴出“数据结构拓扑图”,这些数据表(也就是上面提到的MVC中的“Models”)是如何创建,以及各个表中间的关系是我们这章的主要内容。
下面我们再来看一下数据结构拓扑图:
图中的每一个数据表都是一个数据实体,都是一个类,而每一个类都以特别的身份出现在上面我们讲到的数据上下文中。下面我们仅仅以“Movie”及与其相关联的几个实体为例来说明创建数据实体模型:
在解决方案资源管理器中找到 Models文件夹,点击右键依次选择:添加/类,如下图所示:
在新建类对话框的类名处输入:MvcMovieStoreModels.vb,之后会看到刚刚建好的类,如下图所示:
删除现有的代码,然后粘贴以下代码:
1 Public Class Movie
2
3 Property MovieID As Guid
4 Property ChannelID As Guid
5 Property Categories As String
6 Property Poster As String
7 Property Still As String
8 Property Title As String
9 Property TranslationTitle As String
10 Property ReleaseYear As String
11 Property Area As String
12 Property HDType As String
13 Property Language As String
14 Property Subtitle As String
15 Property Format As String
16 Property FileSize As String
17 Property Duration As String
18 Property Director As String
19 Property Actors As String
20 Property Summary As String
21 Property Hits As Int32
22 Property PlayCount As Int32
23 Property CreationDate As Date
24 Property Creator As String
25 Property IsRecommendation As Boolean
26 Property RecommendationDate As String
27 Property Score As Decimal
28
29 End Class
这里面的每一个属性最终都会被解释成为数据表的一个字段,每个字段的意思不需要我再来解释了吧(如果真不明白的话就用谷歌翻译,或者必应翻译)。
向Movie模型中添加验证规则
现在开始向Movie类添加一些验证逻辑,利用内置的Required、 StringLength、RegularExpression和Range的验证特性,来更新刚才建好的Movie类,结果如下代码:
Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations
Imports System.ComponentModel.DataAnnotations.Schema
Imports System.Globalization
Imports System.Data.Entity
Imports System.Security.Claims
Imports Microsoft.AspNet.Identity.EntityFramework
Imports Microsoft.AspNet.Identity
Imports System.Threading
Imports Microsoft.AspNet.Identity.Owin Public Class Movie <Key, DatabaseGenerated(DatabaseGeneratedOption.Identity), ScaffoldColumn(False)> Property MovieID As Guid
<Required, Display(Name:="频道")> Property ChannelID As Guid
<Required, Display(Name:="频道分类")> Property Categories As String
<Required, StringLength(100), Display(Name:="海报")> Property Poster As String
<Required, StringLength(100), Display(Name:="剧照")> Property Still As String
<Required, StringLength(50), Display(Name:="片名")> Property Title As String
<StringLength(50), Display(Name:="译名")> Property TranslationTitle As String
<Required, StringLength(5), Display(Name:="年代")> Property ReleaseYear As String
<Required, StringLength(20), Display(Name:="区域")> Property Area As String
<Required, StringLength(20), Display(Name:="画质")> Property HDType As String
<Required, StringLength(20), Display(Name:="语言")> Property Language As String
<Required, StringLength(20), Display(Name:="字幕")> Property Subtitle As String
<StringLength(20), Display(Name:="格式")> Property Format As String
<StringLength(20), Display(Name:="大小")> Property FileSize As String
<StringLength(20), Display(Name:="时长")> Property Duration As String
<StringLength(100), Display(Name:="导演")> Property Director As String
<Display(Name:="演员")> Property Actors As String
<Display(Name:="简介"), Required, AllowHtml> Property Summary As String
<Required, Display(Name:="热度")> Property Hits As Int32
<Required, Display(Name:="播放次数")> Property PlayCount As Int32
<Required, Display(Name:="创建日期")> Property CreationDate As Date
<Required, StringLength(20), Display(Name:="创建者")> Property Creator As String
<Required, Display(Name:="推荐")> Property IsRecommendation As Boolean
<StringLength(20), Display(Name:="推荐日期"), ScaffoldColumn(False)> Property RecommendationDate As String
<Required(ErrorMessage:="必填"), Display(Name:="评分"), Range(1, 10, ErrorMessage:="介于1~10之间")>
<RegularExpression("^[-+]?[0-9]*\.?[0-9]+$", ErrorMessage:="格式无效")> Property Score As Decimal End Class
验证属性是指要执行它们应用到模型属性上面的行为。 这里我们仅列出比较常用的几种Model验证属性:
- Required和MinimumLength 属性指示属性必须有一个值 ;
- Range属性限制必须为指定范围内的值。
- StringLength属性允许您设置一个字符串属性的最大长度和其最小长度(可选)。
- 值类型的属性 (例如decimal, int, float, DateTime)本身就有默认值,所以不需要在专门使用Required 验证属性。
Movie类已经建好了,其他数据实体类我是都写在MvcMovieStoreModels.vb这个文件中了,当然你也可以分开来写(一个文件中只有一个类)。下面是MvcMovieStore项目用到的所有数据实体模型类的源码,可以 点击下载。
之后呢,就是上面遗留下来的问题,我们需要让这些实体类与我们的数据上下文进行关联,就是在ApplicationDbContext类中添加以下属性代码:
1 Property Movies As DbSet(Of Movie)
2
3 Property Channels As DbSet(Of Channel)
4 Property Categories As DbSet(Of Category)
5 Property ChannelCategoryMaps As DbSet(Of ChannelCategoryMap)
6 Property MovieCategoryMaps As DbSet(Of MovieCategoryMap)
7 Property Areas As DbSet(Of Area)
8 Property ReleaseYears As DbSet(Of ReleaseYear)
9 Property HDTypes As DbSet(Of HDType)
10 Property Actors As DbSet(Of Actor)
11 Property Actormaps As DbSet(Of Actormap)
12 Property Posters As DbSet(Of Poster)
13 Property Scores As DbSet(Of Score)
14 Property DownloadUrls As DbSet(Of DownloadUrl)
15 Property Comments As DbSet(Of Comment)
16
17 Property Carousels As DbSet(Of Carousel)
至此,数据上下文和数据实体模型就建好了,后面将介绍如何使用这些数据实体类,进行CRUD操作。敬请等待后续…
说明:MvcMovieStore项目已经发布上线,想了解最新版本功能请登录 MVC影视(MvcMovie.cn) 进行查阅。如需转载,请注明出处:http://www.cnblogs.com/DoduNet/,或加入 MvcMovieStore 群进行讨论:
MvcMovieStore mvc5.0,EF6.01的更多相关文章
- 原创:MVC 5 实例教程(MvcMovieStore 新概念版:mvc5.0,EF6.01) - 4、创建数据上下文和数据实体模型
说明:MvcMovieStore项目已经发布上线,想了解最新版本功能请登录 MVC影视(MvcMovie.cn) 进行查阅.如需转载,请注明出处:http://www.cnblogs.com/Dodu ...
- 原创:MVC 5 实例教程(MvcMovieStore 新概念版:mvc5.0,EF6.01) - 1、初露锋芒
说明:MvcMovieStore项目已经发布上线,想了解最新版本功能请登录 MVC 影视(MvcMovie.cn) 进行查阅.如需转载,请注明出处:http://www.cnblogs.com/Dod ...
- 原创:MVC 5 实例教程(MvcMovieStore 新概念版:mvc5.0,EF6.01) - 3、创建项目
说明:MvcMovieStore项目已经发布上线,想了解最新版本功能请登录 MVC 影视(MvcMovie.cn) 进行查阅.如需转载,请注明出处:http://www.cnblogs.com/Dod ...
- 原创:MVC 5 实例教程(MvcMovieStore 新概念版:mvc5.0,EF6.01) - 2、数据框架 和 功能预览
说明:MvcMovieStore项目已经发布上线,想了解最新版本功能请登录 MVC 影视(MvcMovie.cn) 进行查阅.如需转载,请注明出处:http://www.cnblogs.com/Dod ...
- ASP.NET Identity 2集成到MVC5项目--笔记01
Identiry2是微软推出的Identity的升级版本,较之上一个版本更加易于扩展,总之更好用.如果需要具体细节.网上具体参考Identity2源代码下载 参考文章 在项目中,是不太想直接把这一堆堆 ...
- MiniProfiler(MiniProfiler.EF6监控调试MVC5和EF6的性能)
git: https://github.com/MiniProfiler 以前开发Webform的时候可以开启trace来跟踪页面事件,这对于诊断程序的性能是有很大的帮助的,起到事半功倍的作用,今天 ...
- 《精通MVC5.0》路由笔记
MVC使用路由系统处理请求的URL.路由系统主要功能 检查请求的URL,并理解该URL对应的控制器和方法 生成URL地址 在MVC程序中有两种方式创建路由:convention-based routi ...
- MVC5与EF6 Code First 第一个入门完整实例教程
mvc如今火的不行,我今天就来介绍一个MVC5与EF6开发的实际的入门实例,因为EF6默认是Code First的,所以我今天也就用EF6 的Code First来做一个简单的实例,为了让实例显得简单 ...
- ASP.NET MVC5 与EF6学习系列
最近学习使用MVC5和EF6,博客园搜索了一番,写下这篇文章记录,以便学习使用. 一.ASP.NET MVC5 网站开发 @洞庭夕照写的博客系列 ASP.NET MVC5 网站开发实践 - 概述 AS ...
随机推荐
- 大数据系列修炼-Scala课程03
前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Sca ...
- 从Ubuntu12.04升级到Ubuntu 14.04之后,系统将无法启动
进入Ubuntu启动界面.通常有几个选项,Ubuntu,Ubuntu先进... 输入e键,进入grub的设置界面.将里面的ro改动为rw就可以. 以上能够启动,临时性的设置 可是为了永久保存这个设置, ...
- linux_sed 正则替换
目标 替换 test.data文件中的 原正则: (\d{4}[^)]*?) sed不支持 \d 改为0-9 测试 :head test.data| sed -r "s/([0-9]{4}[ ...
- c++双缓冲技术,以避免闪烁绘图
当数据量非常大时,画图可能须要几秒钟甚至更长的时间,并且有时还会出现闪烁现象,为了解决这些问题.可採用双缓冲技术来画图. 双缓冲即在内存中创建一个与屏幕画图区域一致的对象,先将图形绘制到内存中的这个对 ...
- JS Tree
jQuery插件实例七:一棵Tree的生成史 在需要表示级联.层级的关系中,Tree作为最直观的表达方式常出现在组织架构.权限选择等层级关系中.典型的表现形试类似于: 一颗树的生成常常包括三个部分:1 ...
- JavaScript中获取当前项目的绝对路径
近期在做JavaWeb项目相关的东西,差点儿每天都遇到非常多问题,主要是由于自己对JavaWeb方面的知识不是非常清楚,尽量把自己在项目中遇到的问题都记录下来,方便以后查阅. 在我们的项目中有这种须要 ...
- winform屏幕截图
原文:winform屏幕截图 屏幕截图是一个比较常用的功能,在项目中出现的比例也比较高,至少我做过的每个项目都有屏幕截图这个功能,从全屏截图到区域截图都有出现过.当然区域截图已然包含了全屏截图. 全屏 ...
- C#随机双色球
using System; using System.Collections.Generic; namespace ConsoleApplicationRandnumber { class Progr ...
- http协议报头信息和主体鉴别
http协议报头信息和主体是使用一个空行分开.这是什么空行?简单的说,那是,\r\n\r\n. 所以会server数据的回归\r\n\r\n结果分离,一个是标题信息.它是一个消息的文本. C#例如,下 ...
- 下载的youtube视频
youtube 视频下载方法[详解] 1.打开网址: http://kej.tw/flvretriever/. 2.输入要下载的youtube视频的网址. 3.点击右侧RETRIEVE NOW ! ...