我在一个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)
{
}
}
问题
我该怎么办才能解决这个(奇怪的)行为?
您是否针对另一个数据库生成迁移?由于生成迁移的数据存储在数据库内部的迁移历史记录表中的self。 – Darren
@Darren:这是相同的连接字符串,指向我之前删除的localdb。 (我尝试选择不同的目录名称,没有区别) – Spikee
您可以发布您的DbContext类和您的EF迁移配置。 – Darren