從零開始搭建前后端分離的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 哦,謝謝!

  


免責聲明!

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



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