我知道如何使用EF 4.3中的迁移API执行种子数据。我整晚都在玩那个。但是,我的最终目标是让我的项目达到用户可以从源代码控制中提取它并按F5并且它们很好用,数据库,种子数据等等。
目前代码优先在新构建上构建数据库非常出色,但在我在包管理器控制台中执行Update-Database之前,不会插入种子数据。此时它运行种子方法并插入我的种子数据。
答案 0 :(得分:9)
OnModelCreating
=每次启动应用程序并首次使用数据访问时。它可能在您的开发环境中很好,但在生产中并不好。此外,在构造上下文时不能使用上下文,因此在此方法中如何种子数据的唯一方法是直接使用SQL。AddOrUpdate
is mostly for migrations。它隐藏了成本(对数据库的反射和查询),因此请谨慎使用。 Database.Exists
内使用OnModelCreating
- 再次因为这个方法在构造上下文时不可用)但它不属于到OnModelCreating
=>单一责任模式。 有更好的方法可以做到这一点。
MigrateDatabaseToLatestVersion
数据库初始化程序将运行迁移集DbMigrator
类,并将数据库迁移到对整个过程具有更高控制权的最新版本DbMigrator
类执行自定义控制台应用程序。 / LI>
答案 1 :(得分:4)
从CreateDatabaseIfNotExists类继承时,在重写的Seed()方法中播种数据有什么问题?
适用于EF 4.2及以下版本,似乎仍在使用EF 4.3+