闽公网安备 35020302035485号
abp new MainApp -u blazor然后按照官方文档操作即可:https://docs.abp.io/en/abp/latest/Getting-Started-Running-Solution?UI=Blazor&DB=EF&Tiered=Yes
abp add-module MyModule --new --add-to-solution-file注意运行该命令的时候要在 MainApp 的目录下。这样 CLI 会在当前目录下创建一个 modules 目录来存放新模块的解决方案,同时把所有项目添加到 MainApp 的解决方案中,还会修改一些文件,这样我们就不用手动集成模块了。
3.在 MyModuleDbContextModelCreatingExtensions.cs 中添加模型映射
public class MyModuleMigrationsDbContext : AbpDbContext<MyModuleMigrationsDbContext>
{
public MyModuleMigrationsDbContext(DbContextOptions<MyModuleMigrationsDbContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ConfigureMyModule();
}
}
然后添加一个名为 MyModuleMigrationsDbContextFactory.cs 的文件: public class MyModuleMigrationsDbContextFactory : IDesignTimeDbContextFactory<MyModuleMigrationsDbContext>
{
public MyModuleMigrationsDbContext CreateDbContext(string[] args)
{
var configuration = BuildConfiguration();
var builder = new DbContextOptionsBuilder<MyModuleMigrationsDbContext>()
.UseSqlServer(configuration.GetConnectionString("MyModule"));
return new MyModuleMigrationsDbContext(builder.Options);
}
private static IConfigurationRoot BuildConfiguration()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../MainApp.DbMigrator/"))
.AddJsonFile("appsettings.json", optional: false);
return builder.Build();
}
}
这两个文件与 MainApp 的 DbContext 内容是类似的,大家可以比较一下。因为模块也要从 appsettings.json 中读取数据库配置,因此我们需要修改 appsettings.json 中的数据库链接字符串,注意需要修改两个位置:一个是 MainApp.DbMigrator 项目中的,另一个是 MainApp.HttpApi.Host 项目中的。仿照 MainApp 的连接字符串添加一个名为 MyModule 的即可。这样模块就可以有一个单独的数据库了。dotnet ef migrations add migrationName --context MyModuleMigrationsDbContext --output-dir Migrations/MyModule注意:要指定要迁移的 DbContext,也就是 MyModuleMigrationsDbContext。同时我们还将迁移文件放在 Migrations/MyModule 目录下,这样不会与 MainApp 的迁移文件混淆。
dotnet ef database update --context MyModuleMigrationsDbContext这样模块的数据库迁移就完成了。
private void ConfigureConventionalControllers()
{
Configure<AbpAspNetCoreMvcOptions>(options =>
{
options.ConventionalControllers.Create(typeof(MainAppApplicationModule).Assembly);
// Add the below line
options.ConventionalControllers.Create(typeof(MyModuleApplicationModule).Assembly);
});
}
再次运行 .HttpApi.Host 和 .Blazor 项目,可以看到前端页面已经添加了一个新模块的链接,只是内容页是空的。接下来我们就可以在 MyModule 解决方案里的 Blazor 项目中开发前端页面了。CreateMap<CreateUpdateProductDto, Product>().Ignore(x => x.Id);学习了几天感觉这个框架还是挺方便的,功能非常强大,但学习起来还是有一定难度的。框架各部分之间的依赖非常多,如果不仔细研究,很容易处处碰壁。好在官方文档写的还是相对比较详细的,只是部分文档还有空缺。希望官方以后补足吧。是否使用框架开发是一个两难的问题,太依赖框架可能会失去对细节的把控,处处受制于框架的实现;不使用框架就得自己重复造轮子。只能见仁见智了。