1

我正在使用 asp.net mvc3 & Entity Framework5。

我的数据库是使用 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。

在这种情况下,现有的用户表将在重新生成后被删除。

我想被添加到角色表中,但将数据留在表用户中。

我应该怎么办?

4

2 回答 2

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>()); 
于 2013-05-13T09:42:32.703 回答
0

了解迁移的工作原理。

http://msdn.microsoft.com/en-us/data/jj591621.aspx

他们有另一个初始化程序,MigrateDatabaseToLatestVersion. 与您使用的相比,这个会自动将您的数据库升级到最新版本,而无需重新创建整个数据库。

于 2013-05-13T09:43:17.850 回答