【发布时间】:2017-08-04 08:31:56
【问题描述】:
我在 Spike 分支上,正在玩 EF Migrations,一旦我得到了我想要的东西,就从头开始创建了实际的 dev 分支(基于以前没有任何 DB 或 ORM 相关代码的分支全部)。
新代码
我有一个使用这个 DbSet 从 DbContext 继承的上下文:
public DbSet<Warehouse> Warehouses { get; set; }
仓库包含这个:
public class Warehouse
{
public string Code { get; set; }
public string Name { get; set; }
}
迁移
如果我跑步
add-migration Warehouse
我得到一个名为 201708040819010_Warehouse.cs 的文件,其中包含以下内容:
public override void Up()
{
RenameTable(name: "dbo.Warehouses", newName: "Warehouse");
DropPrimaryKey("dbo.Warehouse");
AddColumn("dbo.Warehouse", "Code", c => c.String(nullable: false, maxLength: 128));
AlterColumn("dbo.Warehouse", "Name", c => c.String(maxLength: 100));
AddPrimaryKey("dbo.Warehouse", "Code");
CreateIndex("dbo.Warehouse", "Name", unique: true);
DropColumn("dbo.Warehouse", "Id");
DropColumn("dbo.Warehouse", "Abbreviation");
DropTable("dbo.People");
}
这完全不是我所期望的。
怎么了
所有这些重命名、更改列和删除列似乎表明 Migrations 以某种方式确信它需要更新现有数据库中的现有表。
但这不是真的,因为我删除了我的旧 localdb,正在开发一个全新的分支并进行新的迁移。
并非完全出乎意料
然而,我确实有一个包含 Id、名称和缩写的 Warehouse 类(在那个 Spike 分支中玩耍时)。
但那是旧闻了。并且不再物理存在。
我怀疑发生了什么
Visual Studio 是不是自己跳闸了,新迁移基于存储在它的临时文件夹中的信息。我根据this post 清理了看起来可能相关的内容,但没有任何积极影响。
更新
DbContext
public class MyDbContext : DbContext, IMyDbContext
{
public MyDbContext()
:base("MyDb")
{
Configuration.LazyLoadingEnabled = false;
Database.SetInitializer(new NullDatabaseInitializer<MyDbContext>());
}
public DbSet<Warehouse> Warehouses { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations
.AddFromAssembly(Assembly.GetExecutingAssembly());
modelBuilder.Conventions
.AddFromAssembly(Assembly.GetExecutingAssembly());
}
}
EF 迁移配置
internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed(MyDbContext context)
{
}
}
问题
我能做些什么来解决这个(奇怪的)行为?
【问题讨论】:
-
您是否正在针对另一个数据库生成迁移?由于生成迁移的数据存储在数据库内部,因此它自身在迁移历史表中。
-
@Darren:它是相同的 connstring,指向我之前删除的 localdb。 (我尝试选择不同的目录名称,没有区别)
-
能否发布您的 DbContext 类和 EF 迁移配置。
-
@Darren:已添加。
-
对,您能否将迁移文件夹中存在的 c# 与数据库中 _migrationhistory 表中存在的内容进行比较,并确保您的数据库和代码中有所有迁移。
标签: c# .net entity-framework visual-studio-2015 entity-framework-migrations