实体框架核心2.0找不到迁移。

3

我遇到一个奇怪的问题,EF Core 2.0不能识别我的迁移。

在控制台中运行Add-Migration命令后,会在Migrations文件夹内创建名为MyFirstMigration的类。

上下文:

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

项目经理代码:

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.

当我检查数据库文件时,__EFMigrationsHistory表存在,但Blog表不存在。正如您所猜测的那样,运行db.SaveChanges()会抛出异常并告诉我该表不存在。
运行db.Database.Migrate()没有任何作用,但当我删除db文件并运行db.Database.EnsureCreated()时,正确的数据库被创建了。
我必须指出,__EFMigrationsHistory表是空的,因此我可以在Update-Database之后立即创建下一个迁移,并且它将生成与第一个迁移完全相同的代码。
我正在使用VS 15.3.5和WPF上的.Net 4.6.1。
/ 最好的问候
2个回答

3

是因为 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
2
请参阅问题#6401#8012 - bricelam
@bricelam 这个问题并不是很相关,但是我该如何在 OnConfiguring 之后调用 context.Database.Migrate 呢?我有一个动态的租户配置,并且我想在租户信息可用时生成数据库。也在 这里 发布了。 - Shimmy Weitzhandler

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)总是应用新的更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接