2017-10-09 93 views
2

我有当运行在PM的Add-Migration命令我的迁移不是由EF核2.0实体框架的核心2.0找不到迁移

公认的一个奇怪的问题,是在Migrations文件夹内创建的MyFirstMigration类。

语境:

Protected Overrides Sub OnConfiguring(optionsBuilder As DbContextOptionsBuilder) 
    optionsBuilder.UseSqlite("Data Source=blogging.db") 
End Sub 

PM代码:

PM> Add-Migration MyFirstMigration 
To undo this action, use Remove-Migration. 
PM> Update-Database 
No migrations were applied. The database is already up to date. 
Done. 

当我检查dababase文件,__EFMigrationsHistory表存在,但不是博客表。 正如您可能怀疑的那样,运行db.SaveChanges()会引发异常并告诉我该表不存在。

运行db.Database.Migrate()什么都不做,但是当我删除数据库文件并运行db.Database.EnsureCreated(),创建正确的数据库。

我必须指出__EFMigrationsHistory表被创建为空,所以我可以在Update-Database创建下一个迁移后立即生成,它将生成与第一个迁移完全相同的代码。

我在WPF上使用VS 15.3.5和.Net 4.6.1。

/最好的问候

回答

1

是否因为Add-Migration正在将C#文件添加到您的VB.NET项目中?您可以将它们添加到单独的C#项目中,从DbContext程序集中引用它,并将OnConfiguring更新为以下内容。

optionsBuilder.UseSqlite("Data Source=blogging.db", Sub(x) x.MigrationsAssembly("MyCSharpProject")) 
+1

这是多么奇怪的事情。 我也可以看到它添加了Microsoft.CSharp引用,这可能是VS不会抱怨cs文件的原因。 基本上,这会让VB和F#(相信它们有相同的问题)没有真正的ORM,因为我很难相信EF6更容易使用。这种情况在文档中应该确实是“有限的支持”。 – Dimka

+1

参见问题[#6401](https://github.com/aspnet/EntityFrameworkCore/issues/6401)和[#8012](https://github.com/aspnet/EntityFrameworkCore/issues/8012)。 – bricelam

0

我有这个问题,在我的迁移不包含任何实体,然后我发现了一些不是很明显。 DbContext类查看它自己的成员变量,然后将任何流利/属性模型属性应用于生成的迁移。

因此,请确保您的DbContext有这样的事情:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) 
     : base(options) 
    { 
    } 

public virtual DbSet<Blog> Blogs { get; set; } 

让你需要生成一个新的迁移任何更改后还记得。这似乎与之前的版本有所不同,其中update-database(PMC)用于始终应用新的更改。