ABP框架应用

ABP框架应用

参考资料:https://www.cnblogs.com/farb/p/ABPTheory.html

了解:

  • 使用工具:vs2017

  • 开发目标:webapi

  • 使用Mysql数据库

    API登陆:*.Core >> Authorization >> User.cs 文件中有登陆的账号和密码

    账号:admin

    密码:123qwe

1.模板生成

后端框架模版生成地址:https://aspnetboilerplate.com/

2.mysql数据库配置

注:ABP自带的数据库为sqlserver

  • 下载依赖【删除sqlserver的那一个依赖】

    • *.EntityFrameworkCore层添加依赖【注意版本】

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ugsv6ky-1587035325664)(https://s1.ax1x.com/2020/04/15/JP9hBF.png)]

    • *.core层添加依赖【版本与entityframeworkcore层的同依赖版本一致】

      Microsoft.EntityFrameworkCore.Design
      
  • 修改文件(4个文件:3个appsettings.json修改数据库连接),修改目录如下:

    • *.migrator

    • *.web.host

    • *.web.mvc

       "Default": "Server=localhost; Database=数据库名; Uid=root;Pwd=密码;"
      

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TLse14EP-1587035325667)(https://s1.ax1x.com/2020/04/15/JPCb5j.png)]

    • DbContextConfigurer(EntityFrameworkCore下)

      //builder.UseSqlServer(connectionString);
      builder.UseMySql(connectionString);
      //builder.UseSqlServer(connection);
       builder.UseMySql(connection);
      
  • 删除Migrations下的所有文件(自带的sqlserver数据库同步文件)

  • 数据库迁移

Add-Migration NewInit
update-database

迁移错误:

Could not load assembly 'AbpTwo.EntityFrameworkCore'. Ensure it is referenced by the startup project 'AbpTwo.Core'.

原因:启动方式选择错误,即vs2017上方启动模式选择不正确,正确选择为:*.Web.host

数据库迁移时,需要注意上面的默认项目选择efcore

  • 启动【启动模式选择Web.Host

    以此模式启动时,会出现一个启动终端,也可以用IIS模式启动【由于此项目目标平台为linux,故不推荐使用IIS模式启动】

    启动成功:


3.业务开发

  • abp插件,直接通过实体生成相应服务(一步到位)

    **位置:**工具 >> 扩展和更新

  • 安装后编写一个实体类,然后右击:

    using Abp.Domain.Entities.Auditing;
    using System.ComponentModel.DataAnnotations.Schema;
    namespace AbpTwo.DomainEntities.Good
    {
        [Table("Goods")]
        public class Good : AuditedEntity<long>
        {
            /// <summary>
            /// 商品名
            /// </summary>
            [Column(TypeName = "text")]
            public string Name { get; set; }
            /// <summary>
            /// 价格
            /// </summary>
            public int Price { get; set; }
        }
    }
    
    • 右击实体类

    备注:第一次使用时,选择选项中的第一次使用选项

    重新生成解决方案,会报很多错误

    错误1:无效引用(using …)

    解决方案:删除无效引用

    错误2:未能找到相关文件

    解决方法:按照abp的readm配置,然后在efcore下的DbContext.cs文件中新配置的onmodelcreating方法中加

    base.OnModelCreating(modelBuilder);
    
  • 阅读abp生成的Readme.md文件,配置相关文件,如下:

    **注:**每个实体类生成的readme文件中有关变量会不同,下面只是一个参考的例子,具体修改根据readme文件

    • 请打开AbpTwo.Application类库中AbpTwoApplicationModule.cs中的 PreInitialize 方法中:

       //自定义AutoMapper类型映射
      //如果没有这一段就把本所有代码复制上去
      Configuration.Modules.AbpAutoMapper().Configurators.Add(configuration =>
      {
      GoodDtoAutoMapper.CreateMappings(configuration);
      });
      
    • 打开EntityFrameworkCore类库在 AbpTwoDbContext类文件中添加以下代码段,以实现将实体配置到数据库上下文中

      public DbSet<Good>  Goods { get; set; }
      
    • 如果要使用 EntityFrameworkCore 中的 Fluent API 进行具有最高优先级的配置实体,可添加以下代码到方法OnModelCreating

      protected override void OnModelCreating(ModelBuilder modelBuilder)
      {
         modelBuilder.ApplyConfiguration(new GoodCfg());
       }
      
    

    注意:手动给括号中的对象(如:GoodCfg())添加引用

    给上述方法中添加一下代码,解决未找到相关配置文件的错误

    base.OnModelCreating(modelBuilder);
    

    注: 每次添加实体类使用abp插件后,都需要参考新生成的readme文件添加对应的代码在上面的位置(具体步骤如上)


扫码关注微信公众号:菜鸟阿都

在这里插入图片描述

posted @ 2020-04-16 19:12  菜鸟阿都  阅读(182)  评论(0)    收藏  举报