在前面一节,给大家介绍了EF Code-First的原理、环境搭建以及完成第一个Code-First示例,接下来将给大家讲解Code-First的配置项,通过这些配置项,我们能更深入地了解EF Code-First的原理以及具体用法。
温馨提示:本教程提供完整录播视频,请在文章结尾处查看
1. EF Code-First数据库初始化策略
上述示例中,运行代码后,成功创建了一个数据库,但是在第二次运行之后呢?每次运行应用程序时都会创建一个新的数据库吗?当更改模型时,如何去更改数据库呢?要处理这些场景,必须使用数据库初始化策略之一。在Entity Framework中,提供了四种数据库初始化策略:
CreateDatabaseIfNotExists:这是默认初始化器。顾名思义,它将根据配置创建不存在的数据库。但是,如果更改了模型类,然后使用这个初始化器运行应用程序,那么它将抛出异常。
DropCreateDatabaseIfModelChanges:如果您的模型类(实体类)发生了更改,这个初始化器将删除一个现有的数据库并创建一个新的数据库。因此,当模型类发生变化时,您不必担心维护数据库模式。
DropCreateDatabaseAlways:顾名思义,每次运行应用程序时,这个初始化器都会删除现有的数据库,而不管模型类是否发生了更改。当您每次运行应用程序(例如在开发应用程序时)都需要一个新的数据库时,这将非常有用。
Custom DB Initializer:如果上面的方法不能满足需求,可以创建自己的自定义初始化器。
要使用上述DB初始化策略之一,必须使用上下文类中的数据库类来设置DB初始化器,如下所示:
2.EF Code-First实体类配置
在Code-First中,使用默认约定从实体类构建概念模型。Entity Framework Code-First利用了一种编程模式,这个模式称为约定优于配置,但是,可以通过配置实体类来为EF提供它需要的信息,从而覆盖这些约定。在EF Code-First中,提供了两种配置实体类的方法:
使用Fluent API
数据注释属性
数据注释是一种简单的基于属性的配置,您可以将其应用于域类及其属性。这些属性不仅适用于EF,也适用于ASP。NET web表单或MVC等,包含在一个单独的名称空间System.Componentmodel.Dataannotation中。
以下示例演示了一些数据注释属性的使用:
数据注释属性不支持Entity Framework的所有配置选项。可以使用Fluent API,它提供EF的所有配置选项。
以下是数据注释的详细信息
System.ComponentModel.DataAnnotations
System.ComponentModel.DataAnnotations.Schema
3.EF Code-First种子数据
EF6中支持在数据库初始化过程中将数据插入数据库表。如果要为应用程序提供一些测试数据或为应用程序提供某些默认主数据,这将非常重要。
要将数据植入数据库,必须创建自定义数据库初始化程序,这时需要使用自定义数据库初始化策略,并覆盖Seed方法。以下示例显示了在初始化SchoolDB数据库时如何为Student表和Class表提供默认数据:
领取专属 10元无门槛券
私享最新 技术干货