【发布时间】:2014-10-20 11:08:48
【问题描述】:
我正在尝试在实体框架 6.0 中运行代码优先迁移。我在实体模式中添加了 4 个新实体。但是,当我在 VS 2013 中运行“add-migration”命令时,生成的迁移文件包含我的模态中所有授权的脚本(就像初始迁移一样),尽管它们已经在链接数据库中。显然,当我朗姆酒“更新数据库”推荐时,它会生成实体已经存在的错误。我的 DBContext 类如下所示:
public class BidstructDbContext : DbContext
{
public BidstructDbContext() : base(nameOrConnectionString: "Bidstruct")
{
this.Configuration.LazyLoadingEnabled = false;
}
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; }
public DbSet<Permission> Permissions { get; set; }
public DbSet<Company> Company { get; set; }
// New Added Table
public DbSet<Gadgets> Gadgets { get; set; }
public DbSet<Language> Language { get; set; }
public DbSet<LanguageKeys> TranslationKeys { get; set; }
public DbSet<Translations> Translations { get; set; }
static BidstructDbContext()
{
Database.SetInitializer(new DatabaseInitializer());
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
}
}
DatabaseInitializer 类如下所示:
public class DatabaseInitializer :
// CreateDatabaseIfNotExists<BidstructDbContext> // when model is stable
DropCreateDatabaseIfModelChanges<BidstructDbContext> // when iterating
{
private const int AttendeeCount = 1000;
// EF is NOT a good way to add a lot of new records.
// Never has been really. Not built for that.
// People should (and do) switch to ADO and bulk insert for that kind of thing
// It's really for interactive apps with humans driving data creation, not machines
private const int AttendeesWithFavoritesCount = 4;
protected override void Seed(BidstructDbContext context)
{
}
}
任何想法,如何解决这个问题。几天前它对我来说工作正常,但现在我面临这个问题:(
【问题讨论】:
-
你试过
MigrateDatabaseToLatestVersion而不是DropCreateDatabaseIfModelChanges吗?顾名思义,如果您添加了模型,这将重新创建数据库。 -
使用 MigrateDatabaseToLatestVersion 后尝试,结果相同
-
您的迁移文件夹中是否有初始迁移文件,其中包含现有表。
-
错误是什么?您可以发布从启动 Add-Migration 生成的代码
-
@J.W,是的,我在迁移文件夹中有初始迁移文件。
标签: c# asp.net-mvc entity-framework