• 从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之一骨架


      1.环境准备就不说怎么弄了,自行下载VS2017版本以上就行了,这里建议下载VS2019使用,如果下载下来后没有对应版本的SDK。

    可自行到 传送门 微软官方的SDK下载需要的版本进行安装。

      2.打开编译器新建项目,选择ASP.NET Core Web应用程序,点击下一步

      

      输入项目名称后,点击创建。

      

      

    这里选择使用core 2.2 选择API,点创建,到这里就把一个空的webapi项目创建完成了,接下来我们需要创建一个基本的项目目录。这里就我目前接触的项目和自己的理解分的层级结构。

    在项目解决方案上右键-添加-新建项目- 找到core的类库然后选择创建。最终的项目目录结构如下:

        项目目录结构说明:

    1. Baisc主要存放一些通用方法以及底层常用操作的类(如日志、缓存等),或接口、扩展方法等。
    2. Biz主要是MVC结构中的业务处理层。
    3. Controls是我们项目的控制器层,所有与前端交互的接口都应放在该类库中,每一模块对应一个controller。
    4. CoreMvc主要存放过滤器、与前端交互模型、基类控制器、中间件的类库
    5. Dao层主要用于与数据库交互,将数据返回给业务层处理
    6. Modes存放自定义模型与数据库模型。
    7. 启动程序,主要的一些配置都在该类库中的Startup中进行配置

    项目骨架弄完了之后,得考虑如何与数据库和前端进行交互。 数据库交互采用EF Core Code First的方式进行,步骤如下

    在Dao层添加相关依赖:Microsoft.EntityFrameworkCore.SqlServer,Microsoft.EntityFrameworkCore.Tools。 csproj文件如下

     <ItemGroup>
         <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.6" />
         <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.6">
           <PrivateAssets>all</PrivateAssets>
           <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
         </PackageReference>
       </ItemGroup>
    1. 在models层中添加一个demo模型:
      using System.ComponentModel;
      using System.ComponentModel.DataAnnotations;
      using System.ComponentModel.DataAnnotations.Schema;
      
      namespace DemoFrame_Models.Entitys
      {
          [Table(name: "Demo_Model")]
          public class DemoModel
          {
              [Key]
              [DatabaseGenerated(DatabaseGeneratedOption.None)]//不自动增长   使用IdWorker生成
              public long Id { get; set; }
      
              /// <summary>
              /// 用户真实姓名
              /// </summary>
              public string CustomerName { get; set; }
      
              /// <summary>
              /// 证件类型:1 身份证,2 军官证,3 护照
              /// </summary>
              [DefaultValue(1)]
              public int IdentityCardType { get; set; }
          }
      }
    2. 添加数据库上下文:
      using DemoFrame_Models.Entitys;
      using Microsoft.EntityFrameworkCore;
      
      namespace DemoFrame_Dao
      {
          /// <summary>
          /// 数据库上下文
          /// </summary>
          public class DemoDbContext : DbContext
          {
              public DemoDbContext(DbContextOptions<DemoDbContext> options)
           : base(options)
              { }
      
              public DbSet<DemoModel> Blogs { get; set; }
          }
      }
    3. 在Startup添加如下代码:在ConfigureServices中添加
       services.AddDbContext<DemoDbContext>(options => options.UseSqlServer("Server=.;Database=EFDemo;uid=sa;pwd=123456;"));      

      在 Configure 方法中加上

      try
                  {
                      if (env.IsDevelopment())
                      {
                          using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
                              .CreateScope())
                          {
                              var database = serviceScope.ServiceProvider.GetService<DemoDbContext>().Database;
                              database.EnsureDeleted();//每次删除库重建
                              database.EnsureCreated();//这里是为后面的解耦做铺垫
                          }
                      }
                  }
                  catch (Exception ex)
                  {
                      //LogHelper.Logger.Error(ex, "Failed to migrate or seed database");
                  }
    4. 测试一下,在启动类库中Controllers文件夹有个valuesController类,将前面的内容替换成如下代码:
      private readonly DemoDbContext _context;
      
              public ValuesController(DemoDbContext context)
              {
                  _context = context;
              }
              // GET api/values
              [HttpGet]
              public ActionResult<IEnumerable<string>> Get()
              {
                  _context.DemoModel.Add(new DemoModel()
                  {
                      Id = 1,
                      CustomerName = "levy",
                      IdentityCardType = 1,
                  });
                  var res =  _context.SaveChanges();
                  return new string[] { "value1", res +"" };
              }
      
              // GET api/values/5
              [HttpGet("{id}")]
              public ActionResult<DemoModel> Get(long id)
              {
                  
                  return _context.DemoModel.Find(id); ;
              }

      程序启动会自动运行到api/values接口上,插入数据。因为在启动配置文件launchSettings.json中"launchUrl": "api/values"

    5. 接下来我们再跑https://localhost:44304/api/values/1,就能得到刚刚插入的数据了。

    在下一篇中将介绍如何通过autofac实现EF Core code first无需写dataset也可生成表,只用添加实体类就行。

    有需要源码的可通过此 GitHub 链接拉取 觉得还可以的给个 start 哦,谢谢!

      

  • 相关阅读:
    EXT FileUploadField 文件上传失败
    CRM自定义页面
    The report server was unable to validate the integrity of encrypted data in the database. (rsCannotValidateEncryptedData) .
    sql存储过程与临时表
    MERGE INTO
    [LeetCode]Merge Two Sorted Lists
    [LeetCode]Search for a Range
    [LeetCode]Length of Last Word
    [LeetCode]Implement strStr()
    [LeetCode]Pascal's Triangle
  • 原文地址:https://www.cnblogs.com/levywang/p/coreframe_1.html
Copyright © 2020-2023  润新知