2017-08-04 80 views
4

我在一个Spike分支上玩EF转移,一旦我得到我想要的,从零开始创建实际的开发分支(基于以前的分支它根本没有任何DB或ORM相关代码)。EF Migrations生成一个不存在数据的迁移文件

新的代码

我有一个从的DbContext继承与此DbSet上下文:

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"); 
} 

这是不是在所有我所期待的。

什么是错

所有这些重命名,更改列和删除列似乎表明,在某种程度上迁移确信,它需要在现有的数据库更新现有的表。

但事实并非如此,因为我删除了旧的localdb,正在研究一个全新的分支和新的迁移。

没有完全脱离蓝色

的,但我却拥有仓库类(在穗分支玩耍时),包含一个ID,名称和缩写。

但这是旧消息。并没有物理存在了。

我怀疑是怎么回事

是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) 
    { 
    } 
} 

问题

我该怎么办才能解决这个(奇怪的)行为?

+0

您是否针对另一个数据库生成迁移?由于生成迁移的数据存储在数据库内部的迁移历史记录表中的self。 – Darren

+1

@Darren:这是相同的连接字符串,指向我之前删除的localdb。 (我尝试选择不同的目录名称,没有区别) – Spikee

+1

您可以发布您的DbContext类和您的EF迁移配置。 – Darren

回答

2

我找到了。原因是这样的:

enter image description here

之前我没有,因为你只看到它时,你update-database使用-verbose注意到这一点。除非有什么不工作(如现在),否则我不这样做。

而这背后的原因是,要运行,你需要有一个启动项目,在我的情况下是我的REST API。由于它没有连接字符串(但有意),而不是给出错误,因此迁移假设我想使用.\SQLEXPRESS实例的

由于我没有在我的Spike上提供连接字符串,我正在处理SQLEXPRESS时没有注意到,现在正在检查旧的表定义,导致这些重命名和删除而不是干净的创建。

...相当(恼人的)假设。我会首选一个错误。

相关问题