abp(net core)+easyui+efcore實現倉儲管理系統——領域層創建實體(三)


abp(net core)+easyui+efcore實現倉儲管理系統目錄

abp(net core)+easyui+efcore實現倉儲管理系統——ABP總體介紹(一)

abp(net core)+easyui+efcore實現倉儲管理系統——解決方案介紹(二)

 

      在上二篇文章中我們簡單介紹了一下ABP.TPLMS系統的概況,已經對ABP的體系結構以及項目結構有了一個初步的了解。在這一篇文章中我們主要和領域層打交道,主要是創建實體與進行遷移。接下來我們開始創建Module實體。

一、創建Module實體

      實體是DDD(領域驅動設計)的核心概念之一。Eirc Evans是這樣描述的實體的:“它根本上不是通過屬性定義的,而是通過一系列連續性和標識定義的”。因此,實體都有Id屬性並且都存儲到數據庫中。一個實體一般會映射到數據庫的一張表。現在我們來完成以下任務:在領域層創建一個Entitys文件夾,並在這個文件夾中創建Module實體類。

1. 在Visual Studio 2017的“解決方案資源管理器”中,右鍵單擊“ABP.TPLMS.Core”項目。 選擇“添加” > “新建文件夾”。如下圖。

2.將文件夾命名為“Entitys”。

3. 右鍵單擊“Entitys”文件夾,然后選擇“添加” > “類”。 將類命名為 Module,然后選擇“添加”。如下圖。

 

4.ABP中所有的實體類都繼承自Entity,而Entity實現了IEntity接口;而IEntity接口是一個泛型接口,通過泛型指定主鍵Id類型,默認的Entity的主鍵類型是int類型。如下圖。

 
5.創建Module類,肯定需要保存創建時間,可以通過實現審計模塊中的IHasCreationTime來實現這種通用功能。如下圖。

 

6.  abp中實體是派生於Entity類,先看一下我們在Core層新建的Module類。代碼如下:

using Abp.Domain.Entities;
using Abp.Domain.Entities.Auditing;
using Abp.Timing;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text; 

namespace ABP.TPLMS.Entitys
{
    public class Module:Entity, IHasCreationTime
    {

        public const int MaxLength = 255;
        public Module()
        {

            this.DisplayName = string.Empty;
            this.Name = string.Empty;
            this.Url = string.Empty;
            this.HotKey = string.Empty;
            this.ParentId = 0;
            this.IconName = string.Empty;
            this.Status = 0;
            this.ParentName = string.Empty;
            this.RequiredPermissionName = string.Empty;
            this.RequiresAuthentication = false;
            this.SortNo = 0;         

            CreationTime = Clock.Now;
        }    

        [Required]
        [StringLength(MaxLength)]
        public string DisplayName { get; set; }
 

        [Required]
        [StringLength(MaxLength)]
        public string Name { get; set; } 

        [Required]
        [StringLength(MaxLength)]
        public string Url { get; set; }
 

        [StringLength(MaxLength)]
        public string HotKey { get; set; }
        public int ParentId { get; set; }
        public bool RequiresAuthentication { get; set; }
        public bool IsAutoExpand { get; set; } 

        [StringLength(MaxLength)]
        public string IconName { get; set; }
        public int Status { get; set; } 

        [Required]
        [StringLength(MaxLength)]
        public string ParentName { get; set; }
 

        [StringLength(MaxLength)]
        public string RequiredPermissionName { get; set; }
        public int SortNo { get; set; }           
        public DateTime CreationTime { get; set; }     
    }
}

      在上面的Module實體類中的一些屬性上我們定義了[Required]、[MaxLength]等特性用來進行輸入校驗的。

      上面的Module實體類,沒有添加Id屬性,為什么呢?因為Module繼承自Entity類,Entity類已經定義Id,它是該Entity類的主鍵。因此,所有繼承Entity類的實體類的主鍵名都是Id

      Id(主鍵)的類型是可以更改的,默認是int(int32)。如果你想將Id定義為其他類型,可以在<>內寫,比如Guid,long也是可以的。

      Entity類重寫了等號運算符(==),可以輕松地檢查兩個實體是否相同了(實體的Id相同則認為它們相同)。它也定義了IsTransient方法來檢測它是否有Id。 

      IHasCreationTime接口使用一個通用的屬性來描述一個實體的“創建時間”。當實現了該接口的實體類插入到數據庫中時,ABP會自動地將當前的時間設置給CreationTime。

      7.定義好實體之后,我們就要去DbContext中定義實體對應的DbSet,以應用Code First 數據遷移。找到我們的基礎服務層,即以EntityFrameworkCore結尾的項目中,找到DbContext類,如下圖,添加以下代碼。

 

 

using Microsoft.EntityFrameworkCore;
using Abp.Zero.EntityFrameworkCore;
using ABP.TPLMS.Authorization.Roles;
using ABP.TPLMS.Authorization.Users;
using ABP.TPLMS.MultiTenancy;
using ABP.TPLMS.Entitys;
 

namespace ABP.TPLMS.EntityFrameworkCore
{

    public class TPLMSDbContext : AbpZeroDbContext<Tenant, Role, User, TPLMSDbContext>
    {

        /* Define a DbSet for each entity of the application */      

        public TPLMSDbContext(DbContextOptions<TPLMSDbContext> options)
            : base(options)
        {
        }

        public DbSet<Module> Modules { get; set; }
    }

}

二、執行Code First數據遷移,

    1.從菜單中選擇“工具->NuGet包管理器器—>程序包管理器控制台”菜單。如下圖。

 

    2. 在PMC中,默認項目選擇EntityframeworkCore對應的項目后。輸入以下命令:Add-Migration AddEntityModule,創建遷移。如下圖。

 

    3. 在上面的命令執行完畢之后,創建成功后,會在Migrations文件夾下創建時間_AddEntityModule格式的類文件,這些代碼是基於DbContext指定的模型。如下圖。

 

4.在程序包管理器控制台,輸入Update-Database,回車執行遷移。執行成功后,查看數據庫,Moudles表創建成功。如下圖。

 

 

 

 


免責聲明!

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



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