C# 项目启动时应用代码优先迁移
我想在项目开始时执行自动迁移 代码和说明: 创建到数据库的连接字符串,并映射数据库C# 项目启动时应用代码优先迁移,c#,entity-framework-5,entity-framework-migrations,C#,Entity Framework 5,Entity Framework Migrations,我想在项目开始时执行自动迁移 代码和说明: 创建到数据库的连接字符串,并映射数据库 static class Program { static void Main() { var connectStr = new SqlConnectionFactory() .CreateConnection(new SqlConnectionStringBuilder { DataSource =
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 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);
}
}
}
}
}
公共类ContentInitializer:IDatabaseInitializer
{
public void InitializeDatabase(ContentDb上下文)
{
如果(!context.Database.Exists()| |!context.Database.CompatibleWithModel(false))
{
var mConfig=新的DBMigOptionsConfiguration();
mConfig.TargetDatabase=new DbConnectionInfo(context.Database.Connection.ConnectionString);
var migrator=新的DbMigrator(mConfig);
var migrations=migrator.GetPendingMigrations();
if(migrations.Any())
{
var scriptor=new MigratorScriptingDecorator(migrator);
string script=scriptor.ScriptUpdate(null,migrations.Last());
如果(!String.IsNullOrEmpty(脚本))
{
context.Database.ExecuteSqlCommand(脚本);
}
}
}
}
}
您可以使用内置的初始值设定项
Database.SetInitializer<ContentDb>(new MigrateDatabaseToLatestVersion<ContentDb,
Project.Migrations.Configuration>());
using (var dB = new ContentDb(connectStr))
{
dB.Database.Initialize(true);
}
Database.SetInitializer(新的MigrateDatabaseToLatestVersion());
使用(var dB=new ContentDb(connectStr))
{
dB.Database.Initialize(true);
}
如果将其添加到项目启动中(例如,ASP.NET的Global.asax.cs
中的Application\u start()
),将立即应用迁移
如果尚未启用迁移,可以在package manager控制台中执行以下操作:
启用迁移–启用自动迁移
注意:自动迁移有些限制,我建议使用“编码迁移”。有关详细信息,请参见例如
Database.SetInitializer<ContentDb>(new MigrateDatabaseToLatestVersion<ContentDb,
Project.Migrations.Configuration>());
using (var dB = new ContentDb(connectStr))
{
dB.Database.Initialize(true);
}