标签: dbmigrator

代码优先DbMigrator在从不同的机器构建时导致错误

我们在SCM下有一个项目.当我从我的机器构建它并通过msdeploy发布到远程服务器时,一切正常.

当我的同事用同一个项目尝试相同的事情时,从SCM新推出,在远程服务器实体框架4.3.1上DbMigrator抛出:

未应用自动迁移,因为它会导致数据丢失.

事实证明,初始发布到远程服务器的人似乎是"赢家".如果我们将数据库放在远程服务器上,那么我的同事可以发布并且我被锁定了.我的出版物导致上述相同的错误.

配置DbMigrator看起来像这样:

        var dbMgConfig = new DbMigrationsConfiguration()
        {
            AutomaticMigrationsEnabled = true,
            //***DO NOT REMOVE THIS LINE, 
            //DATA WILL BE LOST ON A BREAKING SCHEMA CHANGE,
            //TALK TO OTHER PARTIES INVOLVED IF THIS LINE IS CAUSING PROBLEMS    
            AutomaticMigrationDataLossAllowed=false,
            //***DO NOT REMOVE THIS LINE,
            ContextType = typeof(TPSContext),
            MigrationsNamespace = "TPS.Migrations",
            MigrationsAssembly = Assembly.GetExecutingAssembly()
        };
Run Code Online (Sandbox Code Playgroud)

我认为这与新表__MigrationHistory和存储在其行中的令人讨厌的长十六进制字符串有关.

我不想对出版生活承担全部责任.我能指出什么?

c# entity-framework ef-code-first entity-framework-4.3 dbmigrator

43
推荐指数
1
解决办法
9657
查看次数

DbMigrator.GetPendingMigrations()始终为空

我正在使用DbMigrator该类来获取待处理迁移的列表.由于某种原因,即使存在待定迁移,它也不会返回任何项目.我错过了一步吗?

var configuration = new Migrations.Configuration();
configuration.TargetDatabase = new DbConnectionInfo("MyDatabase");

var migrator = new DbMigrator(configuration);
var migs = migrator.GetPendingMigrations().ToList();
Console.WriteLine(migrator.GetPendingMigrations().ToString());
Run Code Online (Sandbox Code Playgroud)

我认为它可能是连接字符串,但有趣的是migrator.GetDatabaseMigrations()返回已应用于db的正确迁移列表.

migration entity-framework ef-code-first dbmigrator

6
推荐指数
1
解决办法
2011
查看次数

如何在不使用nameOrConnectionString硬编码的情况下使用EF CodeFirst Migrations

如何在没有在所需的无参数构造函数的基础上对nameorconnectionstring进行硬编码的情况下使EF迁移工作?

EF迁移强制您向自定义dbcontext添加默认构造函数.在dbcontext的基础中,您必须提供nameorconnectionstring.

public class CustomDbContext : DbContextBase
    {
        public CustomDbContext ()
            : base("theconnectionstringwedontwanttoset") //hardcoded connection string
        {
        }
Run Code Online (Sandbox Code Playgroud)

我们需要对构造函数进行硬编码这一事实是我们无法使用的,因为在我们的客户端应用程序中,我们在没有配置文件的情况下工作,并且我们动态建立连接,因为我们连接到许多不同的数据库(服务器,本地sql compact).

在探索DbMigrationsConfiguration类之后,我找到了一个名为TargetDatabase的DbConnectionsInfo属性,可以在构造函数中设置它.但即使这个解决方案也行不通.这就是我做的:

public sealed class Configuration : DbMigrationsConfiguration<CustomDbContext>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = true;
            //Setting the TargetDatabase in the hope it will use it in the migration  
            TargetDatabase = new DbConnectionInfo("Server=xxx;Database=xxx;Trusted_Connection=True", "System.Data.SqlClient");
        }


public class MigrationInitializer : MigrateDatabaseToLatestVersion<CustomDbContext, Configuration>
    {
    }
Run Code Online (Sandbox Code Playgroud)

我可以看到最终在DbMigrator中使用了Activator.CreateInstance,我期望从这个类中使用TargetDatabase.Create ...或者其他东西.

欢迎任何帮助或反馈.

提前致谢,

Wilko

migration entity-framework code-first dbcontext dbmigrator

5
推荐指数
1
解决办法
517
查看次数

手动将DbContext提供给DbMigrator

Platform .NET 4.5和Entity Framework 6.

问题 我有以下代码来执行迁移:

//The following function just returns an object of the Configuration() class 
//generated by code migrations
var migratorConfig = currentMigrationProvider.CreateDbMigrationConfiguration(); 
var dbMigrator = new System.Data.Entity.Migrations.DbMigrator(migratorConfig);
dbMigrator.Update();
Run Code Online (Sandbox Code Playgroud)

问题是Update()函数尝试创建我的DbContext类的实例,出于一些好的原因,我需要手动创建上下文并将其提供给dbMigrator.那可能吗?怎么样?

c# entity-framework dbcontext ef-migrations dbmigrator

5
推荐指数
1
解决办法
2508
查看次数