DOTNET EF创建您自己的自定义命令

时间:2019-12-22 07:27:01

标签: asp.net entity-framework-core

是否可以扩展

Dotnet ef migrations/database/dbcontext

创建我们自己的命令?

如果是,我们该怎么做?我正在寻找类似Laravel https://laravel.com/docs/5.8/artisan中的内容,您可以在其中创建自己的命令。

基本上,我想创建命令来播种数据库。我很清楚,我可以创建一个将数据作为种子的类,并且可以从启动类中调用它。我只想知道它是否可以从实体框架中获得?

例如

dotnet ef migrations seed-data

其中seed-data是我的自定义命令。

谢谢

1 个答案:

答案 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,但最好先了解它的工作原理,并思考您的代码如何使用它。