基於 ASP.NET Core 2.0 WebAPI 後台架構搭建(2) - EF Core (MySQL) CodeFirst 資料庫遷移與依賴注入

來源:互聯網
上載者:User

標籤:檔案   ring   collect   程式包管理   asp.net   serve   protect   設計原則   database   

  概述

  上一章,我們簡單的搭建了依賴注入的三層架構,但是,沒有真正的使用,而我們現在就使用MySQL資料,基於 EF Core 的 DbFirst 進行架構搭建。

  •  微軟爸爸官方文檔:使用新資料庫在 ASP.NET Core 上開始使用 EF Core
  •    資料庫表欄位命名規範

 

  步驟

  1. 右擊 Entity 項目,點擊“管理NuGet程式包”

  

 

  2. 安裝以下三個包

  • Microsoft.EntityFrameworkCore     安裝版本:2.1.0
  • Microsoft.EntityFrameworkCore.Tools     安裝版本:2.1.0
  • Pomelo.EntityFrameworkCore.MySql   安裝版本:2.1.0-rc1-final,注意,由於當前這個最新穩定版還是2.0.1,如果安裝了2.0.1,將會在資料庫遷移中失敗。因此應該在NuGet中勾選“包括預發行版”,安裝最新的 2.1.0-rc1-final

  安裝完成後,如所示

  

 

  3. 在 Entity -> DataTable 檔案夾下,添加 BaseEntity.cs ,注意,這裡的屬性值不按照平時的Pascal命名規則,而是採用資料庫命名設計原則去命名,相見參考連結二。

    public abstract class BaseEntity    {        public BaseEntity()        {            create_time = DateTime.Now;        }        /// <summary>        /// DB版號,Mysql詳情參考;http://www.cnblogs.com/shanyou/p/6241612.html        /// </summary>        //1537269869//Mysql不允許byte[]類型上標記TimeStamp/RowVersion,這裡使用DateTime類型配合標記ConcurrencyCheck達到並發控制        [ConcurrencyCheck]        public DateTime row_version { get; set; }        /// <summary>        /// 建立時間        /// </summary>        public DateTime create_time { get; set; }    }
BaseEntity

 

  

  4. 在 Entity -> DataTable 檔案夾下,添加 DT_User.cs

    public class DT_User : BaseEntity    {        public DT_User()        {        }        [DataMember]        [Key]        public long user_id { get; set; }        [Required]        [MaxLength(50)]        [Description("使用者名稱")]        public string user_name { get; set; }        [Required]        [MaxLength(32)]        [Description("密碼")]        public string user_password { get; set; }    }
DT_User

 

 

  5. 在 Entity -> MyContext.cs 檔案夾中,添加資料表

    public class MyContext : DbContext    {        public MyContext() : base()        {        }        public MyContext(DbContextOptions<MyContext> options)                    : base(options)        {        }        override protected void OnConfiguring(DbContextOptionsBuilder optionsBuilder)        {            base.OnConfiguring(optionsBuilder);        }        #region 資料表        public DbSet<DT_User> DT_User { get; set; }        #endregion    }
MyContext

 

 

  6. 在 Bll -> Interfaces 檔案夾下,添加介面 IDT_UserService.cs,可以注意到

    public interface IDT_UserService : IBllService<DT_User>    {        /// <summary>        /// 插入一個新對象        /// </summary>        /// <returns></returns>        DT_User Insert();        /// <summary>        /// 擷取使用者資料表        /// </summary>        /// <returns></returns>        IEnumerable<DT_User> GetList();    }
IDT_UserService

 

 

  7. 在 Bll -> Implements 檔案夾下,添加類 DT_UserService.cs

    public class DT_UserService : BllService<DT_User>, IDT_UserService    {        /// <summary>        /// 用於執行個體化父級        /// </summary>        /// <param name="rep"></param>        public DT_UserService(IDalService<DT_User> dal) : base(dal)        {        }        public IEnumerable<DT_User> GetList()        {            return GetEntities(r => true);        }        public DT_User Insert()        {            DT_User user = new DT_User            {                user_name = "test-" + new Random().Next(10000),                user_password = DateTime.Now.ToString()            };            return AddEntity(user, true);        }    }
DT_UserService   8. 回到 Signup.cs 檔案中,添加資料庫注入依賴和業務類Service,以後每加一個業務類Service都必須在這裡加入一個 services.AddTransient()
    public class Startup    {        public Startup(IConfiguration configuration)        {            Configuration = configuration;        }        public IConfiguration Configuration { get; }        // This method gets called by the runtime. Use this method to add services to the container.        public void ConfigureServices(IServiceCollection services)        {            // 設定資料庫實體依賴注入            services.AddDbContext<MyContext>(options => options.UseMySql(Configuration.GetConnectionString("MySqlConnection")));            DIRegister(services);            services.AddMvc();        }        // 配置依賴注入映射關係        public void DIRegister(IServiceCollection services)        {            services.AddTransient(typeof(IDalService<>), typeof(DalService<>));            services.AddTransient(typeof(IDT_UserService), typeof(DT_UserService));        }        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.        public void Configure(IApplicationBuilder app, IHostingEnvironment env)        {            if (env.IsDevelopment())            {                app.UseDeveloperExceptionPage();            }            app.UseMvc();        }    }
Startup

 

  9. 在 appsettings.json 下,添加MySQL資料庫連接字串

{  "ConnectionStrings": {    "MySqlConnection": "Server=localhost;database=loda_demo;uid=root;pwd=123456;"  },  "Logging": {    "IncludeScopes": false,    "Debug": {      "LogLevel": {        "Default": "Warning"      }    },    "Console": {      "LogLevel": {        "Default": "Warning"      }    }  }}
appsettings.json

  

  10. 資料庫設計完成,可以進行遷移了,進入“程式包管理主控台”

  

 

  11. 注意在預設項目中,切換到 Entity 項目,在輸入框輸入:add-migration init_1 ,注意,這裡的 init_1 只是當前遷移的名字,當下一次資料庫重新設計後,例如在DT_User中添加一個user_age屬性,需要重新遷移,那麼就需要輸入 add-migration init_2 ,必須跟之前的名字不一樣,名字隨意起,當提示 “To undo this action, use Remove-Migration.”時,代表遷移成功,可以看到項目下多了一些檔案。

  

  

  

  12. 繼續輸入 update-database ,以下就是操作成功的提示,我們可以開啟MySQL資料庫查看是否已經更新成功了。

 

 

 

  13. 最後,在 api 中進行測試,在 ValuesController.cs 中添加如下代碼

[Route("api/[controller]")]    public class ValuesController : Controller    {        private IDT_UserService _userService;        public ValuesController(IDT_UserService userService)        {            //依賴注入得到執行個體            _userService = userService;        }        public IActionResult Test()        {            _userService.Insert();            return Ok(_userService.GetList().ToList());        }    }
ValuesController

 

  

  14. 運行程式,開啟頁面,得到結果,可以去資料庫查看,也已經寫入資料庫了

  

 

  

 

  15. 最後附上架構檔案圖

  

 

  OK,基於EF Core 的 MySQL資料庫遷移項目就到此結束了,如果有其他業務,可以依照上述DT_User,DT_UserService,IDT_UserService中擴充,有了類比的使用者資料,我們就要開始考慮如何進行使用者驗證了。下一章,我們將介紹使用 JWT 進行身分識別驗證。

 

 

 

 

基於 ASP.NET Core 2.0 WebAPI 後台架構搭建(2) - EF Core (MySQL) CodeFirst 資料庫遷移與依賴注入

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.