2014-01-07 105 views
1

我首先使用EF 6代码。 我已经改变了我的DbContext通过connction字符串构造器EF CodeFirst迁移不起作用

public class EFDbContext : DbContext 
{ 
    public EFDbContext(string connectionString) 
     : base(connectionString) 
    { 
     Database.Connection.ConnectionString = connectionString; 
    } 
    public EFDbContext() 
    { 
    } 

    public DbSet<MC_Users> MCUsers { get; set; } 
} 

和Web.Config中

移动连接字符串

一切工作正常。但是向MC_Users添加一个属性, 不影响数据库,我的意思是代码先不起作用。

add-migration test command created a new DbMigration class test 
update-database command applied it successfully 

,但我的数据库表没有改变

请帮

回答

1

你正在改变本地SQLEXPRESS数据库。您需要提供自定义的连接字符串更新数据库的cmdlet:

更新,数据库-ConnectionString

http://coding.abel.nu/2012/03/ef-migrations-command-reference/#Update-Database

您也可以使用DbMigrator类从代码做迁移,而使用Update-Database cmdlet的。当您使用DbMigrator类时,您需要设置dbMigrator.Configuration.TargetDatabase以更改默认连接字符串。

var dbMigrator = new DbMigrator(new Configuration()); 
dbMigrator.Configuration.TargetDatabase = //New connection settings goes here. 
dbMigrator.Configuration.AutomaticMigrationDataLossAllowed = true; 
dbMigrator.Update(); 

http://msdn.microsoft.com/en-us/library/system.data.entity.migrations.dbmigrator(v=vs.113).aspx

+0

感谢您的帮助,但我从代码给连接字符串。所以在应用程序配置或Web配置中没有连接字符串名称。那么我怎么能给更新数据库-ConnectionString ConnectionString名称 – pravprab

+0

为了迁移到工作,你应该添加连接字符串到web.config。 – mostruash

+1

pravpab,如果您使用powershell cmdlet Update-Database,只有三种方法可以提供连接字符串:1.通过在配置文件中提供它,2.在DbContext类的默认构造函数中对其进行硬编码。 3.使用ConnectionString参数将它传递给cmdlet。 –

1

为了使您的迁移工作,你必须连接字符串添加到您的项目设置为“启动项目”中的web.config/app.config中。在设置这些之后,在包管理器控制台上,您应该选择DbContext项目并尝试更新数据库方法。

+0

我在软件包管理器控制台的“Default project”下拉列表中选择了正确的项目,但这还不够 - 将项目设置为启动项目的窍门。 – Aligma

1

留下一个答案这里我有没有被接受的答案解决了类似的问题:

我有密码错误在我使用针对不同的环境下的app.config。 Get-Migrations不会为您提供有关失败凭据的错误,它只会告诉您“没有将迁移应用于目标数据库”,这非常具有误导性。

希望有人遇到此问题会发现它就像连接字符串中的拼写错误一样简单!

为了谁删除此国防部:

请不要发布相同的答案多个问题。发布一个很好的答案,然后投票/标记以重复关闭其他问题。如果问题不重复,请调整问题的答案。

这不是来自另一个问题的重复答案;这是另外一个答案。我在工作中遇到了这个问题,但接受的解决方案并不是我的答案。这只是另一个选择让别人检查他们是否偶然发现了这个问题。