我正在尝试使用TDD和CodeFirst在ASP.NET MVC中按照20486B培训课程指南编写应用程序,但我偶然发现了一个技术/方法问题,我将在这里尝试描述。当我要编写我的应用程序时,我想预先填充每次构建/运行/发布应用程序时将重建的数据库(因为我理解CodeFirst)。首先想到的是创建一个initial_data.sql
脚本文件,其中包含一堆表格上的插入/更新,这些文件将在我的应用程序的每次构建/运行/发布时启动。它可能适用于小的初始数据集,但是当我必须修改应用程序时,数据库中已经有更大的数据集?
每次重建数据库时,如何“包含”我的initial_data.sql
文件?
和第二个问题
我如何在现有数据库上保存CodeFirst,保留已存在的记录?
答案 0 :(得分:4)
覆盖Configuration类中的Seed()
方法并加载其中的所有数据。
每次更新数据库/迁移时都会运行Seed()
方法,因此请确保它正常处理现有数据,而不会重复插入等。
在Seed()
方法中,您可以访问可用于执行SQL的DbContext()
实例,但这也意味着您可以使用普通的EF API来更新日期。具体而言,AddOrUpdate()
扩展名非常适合用于加载初始数据。