在使用EntityFramework的.NETCore MVC后端上工作。
解决方案即服务项目,EntityFramework项目和API(MVC)项目。 API项目是令人羡慕的起点/起点。
这是一个现有项目,并且有一个初始迁移文件,我使用该文件从命令行使用dotnet ef database update
来设置数据库。
现在,我向EntityFramework项目添加了一个新模型,并向Context类添加了适当的public DbSet
。现在,我正在尝试为其生成更新迁移文件,以便可以更新数据库。
使用dotnet ef migrations add migration_002
时出现错误:
无法创建类型为'StartNetContext'的对象。添加一个 IDesignTimeDbContextFactory的实现 该项目,或查看https://go.microsoft.com/fwlink/?linkid=851728 在设计时支持其他模式。
搜索与从EF 1-> 2升级相关的帖子和博客...在这种情况下不适合。还是在创建初始迁移时指出问题,同时还要进行播种……同样,在这种情况下也不适合。添加-v选项时,我会得到更多信息:
Microsoft.EntityFrameworkCore.Design.OperationException:无法执行 创建一个类型为“ StartNetContext”的对象。添加一个实现 将“ IDesignTimeDbContextFactory”添加到项目,或查看 https://go.microsoft.com/fwlink/?linkid=851728了解其他模式 在设计时受支持。 ---> System.MissingMethodException:否 为此对象定义的无参数构造函数。
U。什么?我为什么需要那个?搜索指向重新安排启动程序的配置方式……特别要确保该配置。 AddDbContext
正在被呼叫-是
我觉得我要转圈...应该可以使用...有人创建了初始迁移,所以它必须可以使用,对吧?
注意:我在Mac上,因此没有使用Package Manager控制台,因此选择目标项目等也不是解决方案。所有这些都需要直接从CLI完成。
答案 0 :(得分:0)
在您的主项目中添加以下类。
public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<YourDbContext>
{
public YourDbContext CreateDbContext(string[] args)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
DbContextOptionsBuilder<YourDbContext> builder = new DbContextOptionsBuilder<YourDbContext>();
string connectionString = configuration.GetConnectionString("YourDbContextConnectionName");
builder.UseSqlServer(connectionString);
return new YourDbContext(builder.Options);
}
}
希望您的错误会消失!
答案 1 :(得分:0)
因此,在我看来,这只是CLI上的一个简单标志...尽管在解决方案中将Web api项目标记为启动项目,但我也需要在命令行上指定它。
dotnet ef migrations add migration_002 -s ../MyWebApp.Api
我是从this post那里得到的。 即使没有代码也没有添加类,添加-s标志仍然有效(我确实先尝试过,但是在return语句中遇到了问题)。 这是生活中简单的事情。