我正在使用asp.net mvc3&实体框架5.
我的数据库是使用Code-First设计的。
实体代码
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
public class EFDbContext : DbContext
{
public DbSet<User> Users { get; set; }
}
创建数据库选项
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EFDbContext>());
我使用此选项,已创建数据库。
创建数据库后,我需要一个Role表。
所以我必须按如下方式修改代码。
实体代码
public class User
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Role
{
public int Id { get; set; }
public string Name { get; set; }
}
public class EFDbContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
}
我再次使用Create DB Option。
在这种情况下,将在重新生成后删除现有的Users表。
我希望将其添加到Role表中,但将数据保留在表Users。
中我该怎么办?
答案 0 :(得分:1)
使用代码优先迁移。
Database.SetInitializer(null);
然后在Package Manager Console
写:
add-migration addedRoles
如果之前未启用迁移,则必须先启用它:
enable-migrations
和最后:
update-database
完成指导: http://msdn.microsoft.com/en-US/data/jj591621
修改强>
如果您希望在运行应用程序时自动升级数据库,则可以使用MigrateDatabaseToLatestVersion
初始化程序:
Database.SetInitializer(new MigrateDatabaseToLatestVersion<EFDbContext, Configuration>());
答案 1 :(得分:0)
了解迁移的工作原理。
http://msdn.microsoft.com/en-us/data/jj591621.aspx
他们有另一个初始化程序MigrateDatabaseToLatestVersion
。与您使用的一个相比,这个会自动将您的数据库升级到最新版本,而无需重新创建整个数据库。