结合EF5.0讲MVC4(二)
来源:互联网 发布:visio mac版 下载 编辑:程序博客网 时间:2024/06/08 02:10
本节导航
1、补充
2、添加对电影的查询
3、添加导演表、创建导演表和电影表的主外键关系
4、Model属性应用
5、持久对象的生命周期
进入目录 下载源码 下载视频
一、补充
1、EF对主键的处理
我们在上一节中的Movie实体中并没有设置ID列为主键列,但是在数据表创建完成之后我们看到ID列成为了主键。这是因为EF会对实体类中ID进行检索,对于出现ID之后,会自动设置ID为主键,如果ID为int类型,则被设置成自增长的主键列。同样,以实体类名+ID形式的组合名称,EF同样也会将其设置成主键列,加入我们Movie中没有ID,而是MovieID,则MovieID就会被设置成主键。同时,我们也可以在ID或者MovieID上添加字段属性来标识它是主键,关键字是[Key]。
[Key]public int ID { get; set; }
[Key]需要添加命名空间System.ComponentModel.DataAnnotations。
2、对于资源的释放
在第一节的内容中有人留言
lz 好像要释放资源把 你的好像都没有释放
在EF处理中,创建的所有连接都在执行完一个Action之后自动Dispose掉了。原因是在Controller中重写了基类的Dispose方法。在执行完Action之后,会自动调用这个重写后的方法,从而达到释放的目的。
protected override void Dispose(bool disposing) { db.Dispose(); base.Dispose(disposing); }
二、添加对电影的查询
先看一下效果
首先我们要对Index页面进行修改,加入如下代码:
@using (Html.BeginForm()) { <p>Genre:@Html.DropDownList("Genre","All") Title:@Html.TextBox("MovieTitle")<br /> <input type="submit" value="Search" /> </p> }
我使用了Html.DropDownList()来显示一个下拉框,同时使用Html.TextBox()等待输入Title。在下拉列表中,我给它起名叫做“Genre”,同时默认值是"All"。
接下来,修改MovieController中的Index方法。
1 public ActionResult Index(string Genre, string MovieTitle) 2 { 3 var genre = from t in db.Movie 4 orderby t.Genre 5 select t.Genre; 6 var GenreList = new List<string>(); 7 GenreList.AddRange(genre.Distinct()); 8 ViewBag.Genre = new SelectList(GenreList); 9 var movies = from t in db.Movie10 select t;11 if (!string.IsNullOrEmpty(MovieTitle))12 {13 movies = movies.Where(m => m.Title.Contains(MovieTitle));14 }15 if (string.IsNullOrEmpty(Genre))16 {17 return View(movies);18 }19 else20 {21 return View(movies.Where(m => m.Genre == Genre));22 }23 24 }
1、获取Movie表中所有的流派并将检索到的信息放置在List当中。通过ViewBag为页面中的名字叫做"Genre"的下拉框赋值。
2、获取所有的电影信息,如果传入的Title不为空,就检索包含Title内容的电影。
3、如果没有选择流派,直接返回movies,如果选择了流派,就在movies中检索包含这个流派的信息并返回。
所有完成之后,就出现了上面的效果。
三、添加导演表,创建导演表和电影表的主外键关系
首先创建导演表,在这里起名Author,在Models下添加。内容有:
public class Author { public int AuthorID { get; set; } public string AuthorName { get; set; } public virtual ICollection<Movie> Movie { get; set; } }
显而易见,一个导演对应多部电影,一对多关系。接下来修改先前的Movie类,内容如下:
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 string Rating { get; set; } public int AuthorID { get; set; } public virtual Author Author { get; set; } }
我在Movie中添加了AuthorID和一个Author类型的Author。AuthorID在这里就成为了外键。
修改完Models,在母版页上添加对Author控制器的导航链接。运行看一下效果。
我们在Author中添加上“成龙”,“冯小刚”。
接下来修改Movie的Index页面。要把这部电影的导演给显示出来。如图:
修改的代码是:
我想,写到这里大家就知道我为什么在Movie实体里添加public virtual Author Author{get;set;}了。
然后,修改MovieController。
public ActionResult Index(string Genre, string MovieTitle) { var genre = from t in db.Movie orderby t.Genre select t.Genre; var GenreList = new List<string>(); GenreList.AddRange(genre.Distinct()); ViewBag.Genre = new SelectList(GenreList); var movies = from t in db.Movie select t; if (!string.IsNullOrEmpty(MovieTitle)) { movies = movies.Where(m => m.Title.Contains(MovieTitle)); } if (string.IsNullOrEmpty(Genre)) { return View(movies.Include(m => m.Author)); } else { return View(movies.Where(m => m.Genre == Genre).Include(m=>m.Author)); } }
接下来修改Create页面。
以及Create方法:
四、持久对象的生命周期
以Movie为例,在MovieController中的Create、Edit、DeleteAction中db.SaveChanges();方法的前后添加如下代码,然后加入断点进入调试,就可以明显的看出变化。
EntityState statebefore = db.Entry(Movie).State;
EntityState stateafter = db.Entry(Movie).State;
如Create中EntityState的变化是 Detached--->Added---->Unchanged,Edit中的变化是Detached--->Modified---->Unchanged,Delete中的变化是:Unchanged--->Deleted---->Detached。
五、Model属性应用
见这里
<script type="text/javascript"><!--google_ad_client = "ca-pub-1944176156128447";/* cnblogs 首页横幅 */google_ad_slot = "5419468456";google_ad_width = 728;google_ad_height = 90;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
- 结合EF5.0讲MVC4(二)
- 结合EF5.0讲MVC4
- 结合EF5.0讲MVC4(四)
- 结合EF5.0讲MVC4(一)--创建一个MVC4应用程序
- 结合EF5.0讲MVC4(一)--创建一个MVC4应用程序
- 结合EF5.0讲MVC4(二)--为先前程序添加查询及主外键关系
- [MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据
- [MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据
- [MVC4]ASP.NET MVC4+EF5(Lambda/Linq)读取数据
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(9)-MVC与EasyUI结合增删改查
- 备忘录 asp.net mvc4 + ef5.0 + mysql 找不到或无法加载已注册的 .Net Framework Data Provider。
- 关于MVC4.0 WebAPI上传图片重命名以及图文结合
- VS2010安装EF5.0 EntityFramework
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统
- 基于MVC4+EF5+EasyUI技术实现通用权限管理系统(EpPlus、HignCharts、Reportviewer报表)
- 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系
- Spring.Net+Nhibernate+ASP.MVC4.0+EasyUI实践(二)
- MVC4.0系统开发新手历程(二)---登录页
- android webview 显示空白页问题解决
- U大师主板检查辅助工具
- 【算法学习】B-Tree编程实现(C++模板类封装)
- java函数参数类型后添加三点的用法
- 用Python写一个简单的中文分词器
- 结合EF5.0讲MVC4(二)
- 如何更改织梦(dedecms)的RSS、sitemap路径至根目录
- 远程桌面配置——收藏网址
- OpenGL ES1.1.12 第二章 2.1.1
- jquery文件上传例子(两种方式)
- linux 0.11内核源码 malloc 的实现
- 坐标
- .NET 程序员必备工具下载
- Windows NT 6 音频设备控制