ASP.NET Core ----ASP.NET Core中使用Code First

勞資張三瘋發表於2018-12-05

開發工具:vscode ,vs2017

語言:net core 2.1

資料庫:sql server 2014

1 建立.net core專案

開啟vscode,按快捷鍵ctrl+shift+~,開啟powershell終端。建立.net core,輸入命令

--新建一個資料夾:md corefirst

--建立.net core MVC模板:dotnet new MVC(如圖所示,建立成功,如果沒有成功,請安裝net core sdk)

接著輸入 dotnet run,看執行效果,.net core2.0之後啟用https,即將下圖中http://localhost:5000https://localhost:5001,在瀏覽器開啟也會看到相對應的結果

2 建立Code First模板

然後用我們宇宙第一的IDE vs開啟剛建立的這個mvc專案。我這裡使用vs2017。
開啟剛建立的專案,在解決方案上線新建一個專案,選擇.NET Standard(不知道什麼的點這裡好好閱讀一下)模板,建立一個類庫名稱叫EFDbServices。在EFDbServices中新建一個Class,我這裡新建的叫EFDataContext,且這個類繼承DbContext,需要在NuGet中引用Microsoft.EntityFrameworkCore,這裡可以直接在NuGet管理器中輸入

Install-Package Microsoft.EntityFrameworkCore -Version 3.0.0-preview.18572.1新增引用

新建一個ModelBaseClassLib這個基類,程式碼如下:

 

  public class ModelBaseClassLib
    {
        /// <summary>
        /// 主鍵
        /// </summary>
        [Key]
        public int ID { get; set; }
        /// <summary>
        /// 是否刪除
        /// </summary>
        public bool IsDeleted { get; set; } = false;
        /// <summary>
        /// 新增人
        /// </summary>
        public int InsertBy { get; set; }
        /// <summary>
        /// 新增時間
        /// </summary>
        public DateTime InsertDateTime { get; set; } = DateTime.Now;
        /// <summary>
        /// 編輯人
        /// </summary>
        public int UpdateBy { get; set; }
        /// <summary>
        /// 編輯時間
        /// </summary>
        public DateTime UpdateDateTime { get; set; }
        /// <summary>
        /// 刪除人
        /// </summary>
        public int DeleteBy { get; set; }
        /// <summary>
        /// 刪除時間
        /// </summary>
        public DateTime DeleteDateTime { get; set; }
    }

建立UserManagement和RoleManagement分別繼承自ModelBaseClassLib,程式碼如下:
UserManagement.cs

   public class UserManagement: ModelBaseClassLib
    {
       
        /// <summary>
        /// 姓名
        /// </summary>
        [MaxLength(100)]
        [Required, Column("UserNmae")]
        public string UserNmae { get; set; }

        /// <summary>
        /// 登入編號
        /// </summary>
        [MaxLength(20)]
        [Required, Column("UserLoginCode")]
        [Unique]
        public string UserLoginCode { get; set; }
        /// <summary>
        /// 登入密碼
        /// </summary>
        [MaxLength(40)]
        [Required, Column("UserLoginPwd")]
        public string UserLoginPwd { get; set; }

        public virtual IList<RoleManagement> Role_Ids { get; set; }


    }

RoleManagement.cs

  public class RoleManagement : ModelBaseClassLib
    {
        /// <summary>
        /// 角色編碼
        /// </summary>
        [MaxLength(50)]
        [Required, Column("RoleCode")]
        [Unique]
        public string RoleCode { get; set; }        
        /// <summary>
        /// 角色名稱
        /// </summary>
        [MaxLength(50)]
        [Required, Column("RoleName")]
        [Unique]
        public string RoleName { get; set; }
    }

 code first新增唯一性約束(Unique)

  [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public class UniqueAttribute : ValidationAttribute
    {
        public override Boolean IsValid(Object value)
        {
            return true;
        }
    }

修改EFDataContext.cs

 public class EFDataContext:DbContext
    {
        public EFDataContext(DbContextOptions<EFDataContext> options):base(options) {}
        public DbSet<UserManagement> userManagements { get; set; }
        public DbSet<RoleManagement>  roleManagements { get; set; }
    }

3 新增依賴注入,生成資料庫

在corefirst這個解決方案中修改appsettings.json,眾所周知,net core中已經沒有了web.config,所有配置都是在appsettings.json進行配置。

在appsettings.json中新增sql server連線字串。

 新增一個新的節點ConnectionStrings,在這個節點下新增 "Connection": "Data Source=.;Initial Catalog=EFCoreFirst;User ID=sa;Password=123456",完整的appsettings.json如下:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionString": {
    "Connection": "Data Source=.;Initial Catalog=EFCore;User ID=sa;Password=123456"
  }
}

.net core中已經沒有了Global.asax這個一般處理程式,代替它的是一個全新的Startup.cs這樣一個啟動類,net core中涉及到所有的操作,都需要在這個檔案中注入,比如常見的cookie,session,json,xml等,我這裡需要做code first,就需要對DbContext這個類做注入。

net core讀取appsettings需要藉助IConfiguration這個介面。

讀取剛才配置的字串
 string _connectionString = Configuration.GetSection("ConnectionString")["Connection"];

新增註入,(需要引用using Microsoft.EntityFrameworkCore)

新增剛建立的EFDataContext類

services.AddDbContext<EFDataContext>()

使用sql server資料庫

 services.AddDbContext<EFDataContext>(o=> {
                o.UseSqlServer(_connectionString);
            });

設定遷移配置,將EF的模板的命令空間遷移到當前注入中

 services.AddDbContext<EFDataContext>(o=> {
                o.UseSqlServer(_connectionString,s=> {
                    s.MigrationsAssembly("EFDbServices");
                });
            });

以上可簡寫為:

   services.AddDbContext<EFDataContext>(options =>
            options.UseSqlServer(_connectionString, b =>
            b.MigrationsAssembly("EFDbServices")));
            services.AddMvc();

然後執行Add-Migration core01。如圖

再執行update-database,這樣資料庫和表就建立成功。

 

以上源打碼已經打包放到github,有需要的可以進行下載。https://github.com/LZZSF/corecodefitsrt

相關文章