关于在asp.net Web应用程序中定义DropCreateDatabaseIfModelChanges的问题

时间:2012-03-18 02:00:18

标签: asp.net-mvc-3 entity-framework code-first

我为我的asp.net Web应用程序添加了以下初始化程序: -

namespace Learning.DAL
{
public class SchoolInitializer : DropCreateDatabaseIfModelChanges<LearningContext>
{
protected override void Seed(LearningContext context)
{
var students = new List<Student>
{
new Student { FirstMidName = "test", LastName = "test2",
EnrollmentDate = DateTime.Parse("2012-01-01") },
//code does here

但我有以下问题需要一些帮助: -

  1. 如果应用程序正在生产,应用程序何时检查IfModelChanges并相应地重新创建Db?只有当我停止并重新运行服务器,或第一个用户访问特定页面时?

  2. 是否会删除并重新创建数据库会导致已经存在的数据被删除?

  3. 如果我从我的新更改中设置的实体中移除属性会对其数据产生什么影响?

  4. 如果我将一个不可为空的属性添加到现有的实体集中,当删除并重新创建数据库时会发生什么? BR

1 个答案:

答案 0 :(得分:1)

  

如果应用程序正在生产,应用程序何时检查   如果IfModelChanges并相应地重新创建Db?只有当我停下来   并重新运行服务器,或者第一个访问特定页面时   用户?

IIS定期回收AppDomain。 EF每个应用程序域缓存一次模型。因此,当您的应用程序被回收并且您的应用程序首次使用上下文时,EF将运行您的初始化程序。因此,如果模型与数据库不同,您的SchoolInitializer将被执行。

  

将丢弃并重新创建数据库导致数据   已经被删除了吗?

是。重新创建数据库后,只有Seed方法中插入的数据才会存在。

  

如果我从我的新更改中设置的实体中删除属性将会是什么   发生在它的数据上?

     

如果我将一个不可为空的属性添加到现有的实体集中,那会是什么   删除并重新创建数据库时会发生什么?

EF检测到模型已更改,数据库将被删除并重新创建。

我的建议是,数据库初始值设定项在开发环境中是首选。对于生产,最好使用脚本创建数据库。这在变更管理中很有用。您还可以查看EF中的数据库迁移功能。