[ASP.NET MVC5 - 03] Entity FrameWork and Model

来源:互联网 发布:cohen sutherland算法 编辑:程序博客网 时间:2024/05/20 13:38

       ASP.NET MVC5 的模型指的是实体类。实体类默认对应着数据库的表。数据库表的每一条记录,原则上可以映射成若干个类的对象实例。在应用程序运行过程中,可能有新的实例生成,需要转换为数据库的记录插入到数据库中,也可能需要删除对象,当然也有可能需要更新对象的属性值。这些操作的结果就是对象的属性值或者对象本身发生了变化,需要将这种变化同步到数据库里面去。从MVC的角度来说,V是视图,肯定不可能来解决对象和数据库之间的同步问题,C是控制器,是负责请求的流转,也不可能来负责这个任务,唯一可能负责这个任务就是模型了,也就是说模型是“自治”的模型。模型不仅包含对象的属性,还要负责将自己的变化同步到数据库。

       那么将变化同步到数据库这个功能由谁来实现呢?这时候就有了Entity FrameWork. EF所做的事情就是管理这些事情。在使用EF的时候,有两种方式可供选择,一种是先写代码,后创建数据库(CodeFirst),另外一种就是先创建数据库,然后再写代码。通常来说,我们是先写代码。那么这个时候,我们都是如何来做的呢?假设我们有如下类:

using System;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; }    }}

这是一个纯实体类,那么我们如何使用Entity FrameWork来实现对对象的管理呢?

public class MovieDBContext : DbContext{    public DbSet<Movie> Movies { get; set; }}

这是一个继承自DBContext的类,这个类的作用顾名思义,就是负责Movie这个实体类与数据库的上下文的维护的。

从整个文件来看,结构如下:

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; }    }}

注意,我们需要添加System.Data.Entity的引用。这时候,MovieDBContext就可以负责连接到数据库,将对象映射到数据库的表。EF默认连接到的是LocalDB,这个数据库是轻量级的SQL Server Express 引擎。这个数据库的特别之处在于,你连接到的是一个.mdf文件,通常位于app_data目录下。对于企业级应用不建议使用localDB的方式,因为不支持IIS,但是LocalDB能够很方便地迁移到SQL Server 或者 SQL Azure。对于VS2012和VS2013,LocalDB是默认安装的。

可以针对MovieDBContext配置数据库连接字符串,示例如下:

<connectionStrings>    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-MvcMovie-20130603030321.mdf;Initial Catalog=aspnet-MvcMovie-20130603030321;Integrated Security=True" providerName="System.Data.SqlClient" />    <add name="MovieDBContext"    connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True" providerName="System.Data.SqlClient"/>

注意,name需要和DBContext的名字一致。




 

 

1 0
原创粉丝点击