我只是考虑将EF迁移用于我们的项目,特别是在发布之间的生产中执行模式更改.
我已经看到提到有一个API可以在运行时使用DbMigration该类执行这些迁移,但我找不到任何具体的示例.
理想情况下,我希望DbMigration每个数据库更改一个文件,并在应用程序启动时自动应用这些更改从当前版本到最新版本.
我DatabaseInitializer上课了
public class DatabaseInitializer : CreateDatabaseIfNotExists<DatabaseContext>
{
protected override void Seed
(
DatabaseContext databaseContext
)
{
// Seed the hash methods.
var defaultHashMethod = new HashMethod
{
Description = "Default",
CreateDate = DateTime.Now
};
databaseContext.HashMethod.Add(defaultHashMethod);
databaseContext.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的DatabaseContext类中,我设置了初始化程序
public DatabaseContext() : base("DatabaseContext")
{
InitializeDatabase();
}
private void InitializeDatabase()
{
Database.SetInitializer(new DatabaseInitializer());
if (!Database.Exists())
{
Database.Initialize(true);
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,只有在执行查询等操作时才会调用种子方法.我的数据库已成功创建,我正在查询表,但从不调用种子方法.
更新:
似乎问题是由于inheriting我的DatabaseContext类中的类引起的,当使用此类执行数据库操作时,不会调用种子方法.使用我的DatabaseContext课程时,一切都按预期工作
public DbSet<TestEntity> TestEntity { get; set; }
protected override void OnModelCreating(DbModelBuilder …Run Code Online (Sandbox Code Playgroud)