2017-10-09 91 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)用於始終應用新的更改。