MVC神韵---你想在哪解脱!(七)
添加一个模型
在本节中我们将追加一些类来管理数据库中的电影。这些类将成为我们的MVC应用程序中的“模型”部分。
我们将使用被称之为“Entity Framework”的数据访问技术来定义这些模型类,并使用这些类来进行操作。Entity Framework(通常被简称为“EF”)支持一个被称之为“code-first”的开发范例。Code-first允许你通过书写一些简单的类来创建模型对象。你可以通过访问这些类的方式来访问数据库,这是一种非常方便快捷的开发模式。
4.1 利用NuGet来安装EFCodeFirst
我们可以利用NuGet包管理器(安装ASP.NET MVC3时会自动安装)来把EFCodeFirst类库添加到我们的MvcMovie工程中。这个类库使得我们可以直接使用code-first。点击“工具”菜单下的“Library Package Manager”子菜单下的“Add Library Package Reference”菜单选项,如图所示。
点击“Add Library PackageReference”菜单选项后,将会弹出一个对话框,标题为“Add Library Package Reference”,如图
默认状态下,左边的“All”选项处于选择状态。因为还没有安装任何包,所以右边面板中显示“找不到任何项”。点击左边面板中的“online”选项,NuGet包管理器将会在服务器上检索所有当前能够获取的包。服务器上有几百个当前能够获取的包,现在我们只关注EFCodeFirst包。在右上角的搜索输入框中输入“EFCode”。在检索结果中,选择EFCodeFirst包,并且点击Install按钮安装包,
点击了install按钮后,会弹出一个接受许可证窗口,在这个窗口中必须要点击“I Accept”按钮,接受许可证条款,安装才能继续进行。
安装完毕后,点击close按钮。我们的MvcMovie工程中会自动加载EntityFramework程序集,其中包含EFCodeFirst类库。
添加模型类
在解决方案资源管理器中,鼠标右击Models文件夹,点击“添加”菜单下的“类”,如图所示。
点击“类”菜单项后,会弹出“添加新项”对话框,在该对话框中将类名命名为“Movie”,如图:
然后点击添加按钮,观察解决方案资源管理器中,Models文件夹下添加了一个Movie.cs类定义文件,并且该文件呈打开状态,
在Movie.cs文件中追加如下所示的五个属性。
public class Movie{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
我们将利用Movie类来代表数据库中的movie(电影)。每一个Movie对象的实例对应于数据表中的一行,Movie类中的每一个属性被映射到数据表的每一列。在同一个Movie.cs文件中,追加如下所示的MovieDBContext类。
public class MovieDBContext : DbContext //Linq连接数据库系列必须用的类
{
public DbSet<Movie> Movies { get; set; }
}
MovieDBContext类代表了Entity Framework中的movie数据库的上下文对象,用来处理数据的存取与更新。MovieDBContext对象继承了Entity Framework中的DbContext基础类。为了能够引用DbContext类,你需要在Movie.cs文件的头部追加如下所示的using语句。 注:还记得DataContext基础类了么!
using System.Data.Entity;
完整的Movie.cs文件中的代码如代码所示:
using System;
using System.Data.Entity;
namespace MvcMovie.Models
{ public class Movie
{ public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
public class MovieDBContext : DbContext
{
public DbSet<Movie> Movies { get; set; } // 实体类对象都保存在DbSet<T>里
}
}
如果要从数据库中存取数据,类似以上所示的代码是必须要写的。在下一节中,我们将要创建一个新的MoviesController类,用来显示数据库中的数据,并且允许用户创建一个新的movie(电影)的列表。
附录:课下思考
LINQ to SQL和Entity Framework对比
LINQ to SQL和Entity Framework都是一种包含LINQ功能的对象关系映射技术。他们之间的本质区别在于EF对数据库架构和我们查询的类型实行了更好的解耦。使用EF,我们查询的对象不再是完全对应数据库架构的C#类,而是更高层的抽象:Entity Data Model。这为我们提供了额外的灵活性,但是在性能和简单性上面也会有所损失。
LINQ to SQL由C#团队开发并在.NET Framework 3.5中发布,而Entity Framework由ADO.NET团队开发并作为.NET Framework 3.5 Service Pack 1的一部分发布。此后,LINQ to SQL由ADO.NET团队接手,其结果是:在.NET 4.0中,ADO.NET团队更加专注于EF的改进,相对来说,LINQ to SQL的改进要小得多。
LINQ to SQL和Entity Framework各有所长,LINQ to SQL是一个轻量级的ORM框架,旨在为Microsoft SQL Server数据库提供快速的应用程序开发,其优点是易于使用、简单、高性能。而Entity Framework的优点在于:其为创建数据库架构和实体类之间的映射提供了更好的灵活性,它还通过提供程序支持除了SQL Server之外的第三方数据库。
EF 4.0一个非常受欢迎的改进是它现在支持与LINQ to SQL几乎同样的查询功能。这意味着我们在系列文章中的LINQ-to-db查询可以同时适用于EF 4.0和L2S。而且,这也使得L2S成为我们学习使用LINQ查询数据库的理想技术,因为其保持了对象关系方面的简单性,并且我们学习到的查询原则和技术同样适用于EF。
说明:.使用EF则建议使用.NET 4.0(VS2010)以上的版本,该版本有成熟完整的EF。
转载于:https://www.cnblogs.com/sonykings/archive/2013/05/24/3097478.html
MVC神韵---你想在哪解脱!(七)相关推荐
- ASP.NET MVC 重点教程一周年版 第七回 UrlHelper 【转】
这节讲 一下ASP.NET MVC中的Helper. 何谓Helper,其实就是在View中为了实现一些灵活功能而写的方法组. 其实ASP.NET MVC的View是Aspx的页面,本身可以声明定义方 ...
- ASP.NET MVC Framework 系列
序言 做为设计模式的王者,MVC在众多领域都成为良好的模型的代名词,从前在ASP.NET下我们只能依靠Monorail来实现ASP.NET下无控件的MVC,但是现在ASP.NET 下的MVC已经成为现 ...
- 《七哥说道》第十一章:自由在我,谢绝安排
原文出处:http://www.yund.tech/zdetail.html?type=3&id=4d72b464000f0df9b16607df0ae652ad 作者:jstarseven ...
- 史上最简单的 Spring MVC 教程(九)
1 前言 在史上最简单的 Spring MVC 教程(五.六.七.八)等四篇博文中,咱们已经分别实现了"人员列表"的显示.添加.修改和删除等常见的增.删.改.查功能.接下来,也就是 ...
- 沈向洋博士:三十年科研路,我踩过的七个坑
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:沈向洋,编辑:机器之心 在近日举办的 X-Talk 上,美国工程院 ...
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记20 Multiple MVCs 多MVC模式、NavigationController导航控制器...
上一话讲完了小人脸Demo,我们也了解了MVC,那么这一话我们来把Demo复杂化,看看多个MVC之间是如何协同工作的.回顾一下我们之前讲过的多个MVC的情况. IOS提供了一些控制器,它们的视图是其他 ...
- ASP.NET MVC Music Store教程(1):概述和新项目
ASP.NET MVC Music Store教程(1):概述和新项目 转自 http://firechun.blog.163.com/blog/static/31804522201102709374 ...
- ASP.NET MVC 重点教程一周年版 第二回 UrlRouting 【转】
一.什么是UrlRouting 你可以使用UrlRouting来配置一些URL的映射,使用户可以按你的规则来访问网站. 使用UrlRouting,一定要规定URL模式,它包括一个位置标识,它将在你请求 ...
- Open Source Bing Maps API for ASP.NET MVC
如果您熟悉ASP.NET MVC,如果你想在ASP.NET MVC中快速的集成地图应用,或进行地图相关的二次开发,您可以通过Bing Maps API for AJAX来开发,在CodePlex上发布 ...
最新文章
- Merge into的使用
- 通过VNC Viewer使用VMware虚拟机的远程桌面连接
- React学习(6)—— 高阶应用:非受控组件
- Telerik RadGridView动态增删行及行列操作
- python根据时间和类型查找文件并将该文件复制到新的文件夹下
- robomaster裁判系统服务器,2018裁判系统调试组网完全攻略
- OpenCV-Python入门教程7-PyQt编写GUI界面
- 小鹏汽车2021财年总收入209.9亿元 同比增长259.1%
- SparkSql学习笔记(包含IDEA编写的本地代码)
- VisualGDB系列10:快速调试Linux应用程序
- 查看python安装的库_查看python及其第三方库的版本和安装位置
- Web 实现登录记住密码功能
- 【网络编程--UDP、TCP】
- 使用Photoshop制作相框
- 制造业信息化与现代企业管理
- python简单语法题_Python练习+简单语法摘要,习题,总结
- 计算机图形学 读书笔记(七)B样条曲线 B-Spline
- 构建一个属于自己的centos7-php80-swoole的Docker镜像
- 【HTML基础】HTML的基本结构
- 电子商务平台到底是什么?这就告诉你!
热门文章
- 看贴回帖 感受与感动
- SVM支持向量机习题解答
- python离线录音转文字_python3实现语音转文字(语音识别)和文字转语音(语音合成)...
- Markdown编辑器中字号、颜色的设置方法及一些好看的颜色示例
- python socket send_全网最详细python中socket套接字send与sendall的区别
- Paradigm此前投资Uniswap的资金价值或超30亿美元
- SAP License:初学作业费用分割
- 赛锐信息:SAP之工厂设置
- Hive 查看库有多少表,表有多少字段以及动态监控
- Zeppelin介绍