在项目开始时应用代码优先迁移
本文关键字:迁移 代码 应用 项目 开始时 | 更新日期: 2023-09-27 18:13:05
我想在项目开始时执行自动迁移。
代码及描述:创建到数据库的连接字符串,并映射数据库。
static class Program
{
static void Main()
{
var connectStr = new SqlConnectionFactory()
.CreateConnection(new SqlConnectionStringBuilder
{
DataSource = "NAME-DATABASE",
InitialCatalog = "TestDB",
IntegratedSecurity = true,
ApplicationName = "TestDB"
}.ToString());
var SessionDB = new ContentDb(connectStr);
}
}
数据库表TestDB和映射表的描述。
public class File
{
public int Id { get; set; }
public string Name { get; set; }
}
public class FileMap : EntityTypeConfiguration<File>
{
public FileMap()
{
ToTable("FILE");
HasKey(x => x.Id);
Property(x => x.Name).HasColumnName("NAME");
}
}
主类域。
public class ContentDb : DbContext
{
public ContentDb(DbConnection connection): base(connection, true)
{
Database.SetInitializer(new ContentInitializer());
Database.Initialize(true);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new FileMap());
base.OnModelCreating(modelBuilder);
}
}
类初始化和迁移
public class ContentInitializer : IDatabaseInitializer<ContentDb>
{
public void InitializeDatabase(ContentDb context)
{
if (!context.Database.Exists() || !context.Database.CompatibleWithModel(false))
{
var mConfig = new DbMigrationsConfiguration();
mConfig.TargetDatabase = new DbConnectionInfo(context.Database.Connection.ConnectionString);
var migrator = new DbMigrator(mConfig);
var migrations = migrator.GetPendingMigrations();
if (migrations.Any())
{
var scriptor = new MigratorScriptingDecorator(migrator);
string script = scriptor.ScriptUpdate(null, migrations.Last());
if (!String.IsNullOrEmpty(script))
{
context.Database.ExecuteSqlCommand(script);
}
}
}
}
}
您可以使用内置的MigrateDatabaseToLatestVersion
初始化器
Database.SetInitializer<ContentDb>(new MigrateDatabaseToLatestVersion<ContentDb,
Project.Migrations.Configuration>());
using (var dB = new ContentDb(connectStr))
{
dB.Database.Initialize(true);
}
如果你将它添加到你的项目启动中(例如,ASP.NET的Application_Start()
中的Global.asax.cs
),迁移将立即应用。
如果您还没有启用迁移,您可以通过在包管理器控制台中执行以下命令来启用迁移:
Enable-Migrations -EnableAutomaticMigrations
注意:自动迁移有些限制,我建议使用"编码迁移"。