是否可以扩展
Dotnet ef migrations/database/dbcontext
创建我们自己的命令?
如果是,我们该怎么做?我正在寻找类似Laravel https://laravel.com/docs/5.8/artisan中的内容,您可以在其中创建自己的命令。
基本上,我想创建命令来播种数据库。我很清楚,我可以创建一个将数据作为种子的类,并且可以从启动类中调用它。我只想知道它是否可以从实体框架中获得?
例如
dotnet ef migrations seed-data
其中seed-data
是我的自定义命令。
谢谢
答案 0 :(得分:2)
不知道是否可以扩展您想要的迁移,但是我认为更好的方法是创建一个DataSeeder类,该类将创建/应用迁移并从Startup.cs中调用它,例如:
public class DataSeeder
{
private readonly MyDbContext _context;
public DataSeeder(MyDbContext context)
{
_context = context;
}
public void MigrateDatabase()
{
_context.Migrate();
}
}
在Startup.cs中:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, DataSeeder dataSeeder)
{
//Bla bla your config
...
dataSeeder.MigrateDatabase();
}
编辑:
您可以通过三种方式扩展CLI工具:https://docs.microsoft.com/en-us/dotnet/core/tools/extensibility#per-project-based-extensibility。
您在这里有很多示例:https://github.com/natemcmaster/dotnet-tools。
但是,我还是想,您应该使用一种像上面我解释过的通用方法。专门针对迁移的原因是,如果更改EF,EF的行为可能会很奇怪。 您可以尝试随意扭曲EF,但最好先了解它的工作原理,并思考您的代码如何使用它。