netcore3.1API+efcore快速搭建


netcore3.1API+efcore快速搭建

框架結構

實體層 Aer.Enties

Models-->實體類

業務層 After.IService

IAltestitemController.cs

業務層 After.Service

AlltestitemService.cs

接口層 AfterCore

Controllers-> AlltestitemController.cs

一 EF從數據庫生成實體類到Enties

1.執行以下語句安裝依賴包

Install-Package MySql.Data.EntityFrameworkCore -Pre
Install-Package Pomelo.EntityFrameworkCore.MySql
Install-Package Microsoft.EntityFrameworkCore.Tools
Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design

2.在程序包包管理器控制台

Scaffold-DbContext "server=localhost;userid=root;pwd=1;port=3306;database=syerp;sslmode=none;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -Force

二 業務層

添加IAlltestitemService.cs接口

using AfterCore.Models;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace After.IService
{
   public interface IAlltestitemService
    {
        /// <summary>
        /// 查詢所有
        /// </summary>
        /// <returns></returns>
        Task<List<Alltestitem>> GetAllAsync();

        /// <summary>
        /// 查詢總數
        /// </summary>
        /// <returns></returns>
        Task<int> CountAsync();
    }
}

After.Service接口實現

AlltestitemService.cs

using After.IService;
using AfterCore.Models;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace After.Service
{
    public class AlltestitemService : IAlltestitemService
    {
        private readonly testContext _testDbContext;//DB
        public AlltestitemService(testContext testContexts)
        {
            _testDbContext = testContexts;
        }

        public async Task<int> CountAsync()
        {
            return await _testDbContext.Alltestitem.CountAsync();
        }

        public async Task<List<Alltestitem>> GetAllAsync()
        {
            return await _testDbContext.Alltestitem.ToListAsync();

        }
    }
}

三 注冊DbContext

appsettings.json

"ConnectionStrings": {
    "DefaultConnection": "Server=;database=test;uid=root;pwd=m;"
  },

Startup.cs

  //注冊DbContext  ConfigureServices
            services.AddDbContext<testContext>(options => options.UseMySql(Configuration.GetConnectionString("DefaultConnection")));
services.AddControllers();
 services.AddScoped<IAlltestitemService, AlltestitemService>();//ioc

四 添加Swagger

安裝依賴包

Swashbuckle.AspNetCore

ConfigureServices(IServiceCollection services)

//注冊swagger服務
            services.AddSwaggerGen(c =>
              {
                  c.SwaggerDoc("v1", new OpenApiInfo
                  {
                      Version = "v1",
                      Title = "SN博客 API",
                      Description = "EFCore數據操作 ASP.NET Core Web API",
                      TermsOfService = new Uri("https://example.com/terms"),
                      Contact = new OpenApiContact
                      {
                          Name = "Shayne Boyer",
                          Email = string.Empty,
                          Url = new Uri("https://twitter.com/spboyer"),
                      },
                      License = new OpenApiLicense
                      {
                          Name = "Use under LICX",
                          Url = new Uri("https://example.com/license"),
                      }
                  });

                  // 為 Swagger 設置xml文檔注釋路徑
                  var basePath2 = AppContext.BaseDirectory;// xml路徑
                  //var xmlModelPath = Path.Combine(basePath2, "Snblog.Enties.xml");//Model層的xml文件名
                  var corePath = Path.Combine(basePath2, "AfterCore.xml");//API層的xml文件名
                  //c.IncludeXmlComments(xmlModelPath);
                  c.IncludeXmlComments(corePath, true);
                  //添加對控制器的標簽(描述)
                  c.CustomSchemaIds(type => type.FullName);// 可以解決相同類名會報錯的問題

                  // c.OperationFilter<AddResponseHeadersFilter>();
                  // c.OperationFilter<AppendAuthorizeToSummaryOperationFilter>();
                  //
                  // c.OperationFilter<SecurityRequirementsOperationFilter>();

              });

Configure(IApplicationBuilder app, IWebHostEnvironment env)

 #region Swagger
            //可以將Swagger的UI頁面配置在Configure的開發環境之中
            app.UseSwagger();
            //和Swagger UI
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "SN博客API");
                c.RoutePrefix = string.Empty;
            });
            #endregion

五 顯示層AfterCore

Controllers->AlltestitemController.cs

using After.IService;
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
//默認的約定集將應用於程序集中的所有操作:
[assembly: ApiConventionType(typeof(DefaultApiConventions))]
namespace AfterCore.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class AlltestitemController : ControllerBase
    {
          private readonly IAlltestitemService _service; //IOC依賴注入

         public AlltestitemController(IAlltestitemService service)
        {
            _service = service;
        
        }
        /// <summary>
        /// 查詢所有
        /// </summary>
        /// <returns></returns>
        // [ApiExplorerSettings(IgnoreApi = true)] //隱藏接口 或者直接對這個方法 private,也可以直接使用obsolete屬性
        [HttpGet("GetAllAsync")]
        public async Task<IActionResult> GetAllAsync()
        {
            return Ok(await _service.GetAllAsync());
        }

         /// <summary>
        /// 查詢總數
        /// </summary>
        /// <returns></returns>
        // [ApiExplorerSettings(IgnoreApi = true)] //隱藏接口 或者直接對這個方法 private,也可以直接使用obsolete屬性
        [HttpGet("CountAsync")]
        public async Task<IActionResult> CountAsync()
        {
            return Ok(await _service.CountAsync());
        }
    }
}

運行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM