您的位置:首页 > 编程语言 > ASP

[ASP.NET MVC]Entity Framework框架之CodeFirst模式学习笔记

2016-05-15 16:58 971 查看
一、EntityFramework

1、Code First 代码优先原则

EntityFramework Code First,允许我们可以不用首先创建数据表,而是直接编写数据库的实体类,然后让EntityFramework读取这个实体类来自动生成数据表。可以看到,EntityFramework在某种程度上帮助我们简化了开发流程,我们直接使用C#语言编写表结构即可生成满足我们要求的数据表,是不是觉得很神奇?更神奇的是,甚至一些简单的数据库操作我们都无需编写SQL语句。既然有这么多好处,我们来看看到底怎么使用?

首先,在项目中我们需要确保项目引用了EntityFramework .dll类库。ASP.NET MVC4 中自带了这个框架,如果没有可以使用NuGet工具搜索下载即可。

然后,打开Web.Config文件,我们就可以看到EntityFramework的配置信息:

<configSections>

<sectionname="entityFramework"type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,EntityFramework, Version=5.0.0.0, Culture=neutral,PublicKeyToken=b77a5c561934e089" requirePermission="false" />

</configSections>

<entityFramework>

<defaultConnectionFactorytype="System.Data.Entity.Infrastructure.LocalDbConnectionFactory,EntityFramework">

<parameters>

<parameter value="v11.0"/>

</parameters>

</defaultConnectionFactory>

</entityFramework>


也就是说,使用EntityFramework,请确保项目中EntityFramework类库和在配置文件中对EntityFramework的配置都存在。

完成了上述前置作业,我们现在开始正式的“Code First”。

1)创建一个模型类。我们首先在Models文件夹下创建一个类,取名为StudentModel。

2)在StudentModel中编写如下代码:

public classStudentContext : DbContext

{

public StudentContext() :base("name=DefaultConnection") { }

public DbSet<StudentModel>Students { get; set; }

}

[Table("Student")]

public class StudentModel

{

[Required]

[Key]

[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]

[DisplayName("ID")]

public int ID { get; set; }

[Required(ErrorMessage="学生姓名不能为空!")]

[DisplayName("姓名")]

[StringLength(4,ErrorMessage="名称不能超过4个字符!")]

public string Name { get; set; }

[Required]

[DisplayName("年龄")]

[Range(0,150,ErrorMessage="年龄必须介于0~150岁之间!")]

public int Age { get; set; }

[Required(ErrorMessage="年级不能为空!")]

[DisplayName("年级")]

public string Grade { get; set; }

[Required]

[DisplayName("家庭住址")]

public string Address { get; set; }

}

首先我们定义了一个StudentContext类,并且让这个类继承自DbContext类,这个类被称为数据库上下文类。它的作用就是在一个数据模型中负责协调Entity Framework功能,因此这一步是非常重要的。此外,我们还须指定数据库的连接字符串。通常,我们希望由Entity Framework生成的数据表能够创建在我们指定的数据库中,那么就需要我们自己编辑数据库连接字符串。

还是打开Web.Config配置文件。找到<connectionStrings></connectionStrings>节点,在此节点中添加我们指定数据库的连接字符串,将名称命名为DefaultConnection。



回到Student模型类中,在StudentContext类中添加一个构造函数:

public StudentContext() :base("name=DefaultConnection") { }

使用这种方式将连接字符串传递给构造函数。当然,我们也可以直接将连接字符串写在这里,而不是传递连接字符串的名称。但是这样并不方便,通常我们还是习惯传递一个名称到这里。在编译的时候,Entity Framework会去Web.Config中查找名称为“DefaultConnection”的连接字符串。然后检查字符串中指定的数据库是否存在。如果正好这个数据库存在,就将数据表创建我们指定的这个数据库中。如果数据库不存在或者我们在一开始空就没有指定连接字符串会出现什么情况呢?答案就是Entity
Framework就会在App_Data文件夹下为我们创建一个数据库,并且在Web.Config中自动添加一条名称与类名称(即StudentContext)一致的指向该数据库的连接字符串。然后将数据表创建在这个数据库中。

接着,我们再在StudentContext中添加一行代码:publicDbSet<StudentModel> Students { get; set; }

如果说DbContext是负责协调数据库相关的话,那么DbSet可以看作是处理实体模型在数据库中的表,他表示上下文中给定类型的所有实体的集合。

接下来,我们就可以开始编写实体模型类了,取名“StudentModel”,如上面代码所示。完成后比忘了编译一下,否则下一步创建控制器的时候,会找不到这个模型类和上下文。

3)终于到了第三步,创建Controller。在Controller文件夹上单击右键“添加→控制器”。



模板选择“包含读/写操作和视图的MVC控制器(使用Entity Framework)”,模型类和数据上下文类就是我们刚才编写的“StudentModel”类和“StudentContext”类。这样我们就完成了控制器的添加。

4)当然,完成了这一步还是看不到数据库中建好的表。记得编译一下,查看数据库中的Student表建好了吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: