我正在使用实体框架核心Ver。 2.2.4,我正在维护一个单独的程序集来维护ef生成的迁移。在应用程序启动期间,当我尝试执行context.Database.Migrate()
时,我在输出日志中收到以下消息
No migrations were found in assembly 'MyProject.Core'.
我已经包含了optionsBuilder.UseSqlite(GetConnectionString(), builder => builder.MigrationsAssembly("MyProject.Core"));
来加载适当的程序集来查找迁移,但没有运气。任何想法发生了什么?
从项目中引用迁移程序集。
如果不能,因为它会导致循环依赖,请将迁移程序集的输出路径设置为主项目的目录:(或以其他方式复制它)
<PropertyGroup>
<BaseOutputPath>..\MyStartupProject\bin\</BaseOutputPath>
</PropertyGroup>
在查看EF Core源代码后,我发现了问题所在。问题出在我的应用程序db上下文类,即AppDbContext:DbContext
。我在我的核心项目中将此类标记为抽象,后来我从android项目中的类派生来定义连接字符串。看起来EF Core将忽略使用包含抽象数据库上下文类型的[DbContext(typeof(AppDbContext))]
属性标记的所有迁移。一旦我使db上下文类具体化,我的迁移就开始起作用了。