Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 项目启动时应用代码优先迁移_C#_Entity Framework 5_Entity Framework Migrations - Fatal编程技术网

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);
}