65.9K
CodeProject 正在变化。 阅读更多。
Home

EntityFramework CodeFirst – DbContext 初始化器

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.67/5 (2投票s)

2011年5月25日

CPOL

1分钟阅读

viewsIcon

40371

EntityFramework CodeFirst – DbContext 初始化器

我们已经讨论了 EntityFramework CodeFirst 方法以及如何在 http://www.dotnetfunda.com/articles/article1358-entity-framework-codefirst-model-.aspx 中从代码生成数据库。

现在,让我们看看如何处理类中的更改,该类是数据库表的基类。 我们可能需要将更改从类传播到数据库表。

考虑我们的示例 Student 类,我们将在其中添加一个新的属性,名为 Address

public classStudent    {
        publicint Id { get; set; }
        publicstring FirstName { get; set; }
        publicstring LastName { get; set; }

        public string Address { get; set; }
        publicList<Mark> Marks { get; set; }
    }

现在运行应用程序并观察指示模型已更改的异常。

Model Change Exception

模型更改异常

让我们看看如何使用更改更新底层的 Student 表。 为了更新类级别的更改到表,请打开 global.asax 文件。 如果您是 ASP.NET 开发人员,您可能知道 global.asax 文件包含不同的应用程序和会话级别事件处理程序。

Application_Start 方法中,使用以下两种选项之一定义数据库初始化器。

  • DropCreateDatabaseAlways:这将会在每次应用程序启动时删除并重新创建数据库。
  • DropCreateDatabaseIfModelChanges:只有当底层模型发生更改时,才会删除并创建数据库。

DbInitializer Options

DbInitializer 选项

我们将使用我们的自定义 DbContext 添加 DropCreateDatabaseIfModelChanges

void Application_Start(object sender, EventArgs e)
{            
	Database.SetInitializer(newDropCreateDatabaseIfModelChanges<MyDbContext>());
}

运行应用程序并观察新的 Student 表。

Updated Student Table

更新后的 Student 表

将数据添加到表中并运行应用程序。

Result Screen

结果屏幕

我们可以通过继承定义的初始化器之一来定义我们自己的 DbContext 初始化器。


归类于: Entity Framework 标签: DbContext, DropCreateDatabaseIfModelChanges, EntityFramework
© . All rights reserved.