2015-08-13 34 views
1

我使用实体框架创建代码第一个模型,并在安装第一个版本到客户端后,我们发现数据库的列中有一些变化,我使用实体框架的迁移并且应用所有迁移步骤bat客户端的数据的基础上执行是否实体框架代码在MySql数据库中的第一迁移

Table 'nameTable' already exists 

Additional information: Duplicate column name 'Reference' 

类配置的该代码不存在的最后变化的迁移历史的行和显示此消息

internal sealed class Configuration : DbMigrationsConfiguration<GSM.DataAccess.GSMContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = true; 
     AutomaticMigrationDataLossAllowed = false; 
     SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator()); 
    } 

    protected override void Seed(GSM.DataAccess.GSMContext context) 
    { 

    } 
} 

和类第一迁移

public partial class AddMoreInformationColumn : DbMigration 
{ 
    public override void Up() 
    { 

      AddColumn("dbo.People", "Reference", c => c.String(unicode: false)); 
      AddColumn("dbo.Products", "Reference", c => c.String(unicode: false)); 
      AddColumn("dbo.Products", "SalePrice", c => c.String(unicode: false)); 
      AddColumn("dbo.Products", "WholePrice", c => c.String(unicode: false)); 


    } 

    public override void Down() 
    { 

      DropColumn("dbo.People", "Address"); 
      DropColumn("dbo.People", "Reference"); 
      DropColumn("dbo.Products", "Reference"); 
      DropColumn("dbo.Products", "SalePrice"); 
      DropColumn("dbo.Products", "WholePrice"); 

    } 
} 

回答

1

这些代码作为对当前的问题,它看起来像客户机迁移快照是不同步的。您可以将Up()方法中冲突的代码注释掉,然后执行更新数据库以使其恢复同步。如果您担心有缺失的变化,您将需要使用模式比较工具(http://www.techbubbles.com/sql-server/schema-compare-for-sql-server-in-visual-studio-2013/)。

我会重新考虑更新客户端(生产)数据库的策略。我们所做的是从我们的迁移中生成一个脚本,该脚本在客户端网站上运行以更新它们。请参阅:http://cpratt.co/migrating-production-database-with-entity-framework-code-first/#at_pco=smlwn-1.0&at_si=54ad5c7b61c48943&at_ab=per-12&at_pos=0&at_tot=1

您还必须考虑数据库初始化程序是什么,并将其设置为null或migratetolatestversion进行部署。

相关问题