EF5 Code-First - 创建新表

时间:2013-05-13 09:21:10

标签: asp.net database entity-framework

我正在使用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。

我该怎么办?

2 个答案:

答案 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。与您使用的一个相比,这个会自动将您的数据库升级到最新版本,而无需重新创建整个数据库。