日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ABP入门系列(2)——领域层创建实体

發布時間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABP入门系列(2)——领域层创建实体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這一節我們主要和領域層打交道。首先我們要對ABP的體系結構以及從模板創建的解決方案進行一一對應。網上有代碼生成器去簡化我們這一步的任務,但是不建議初學者去使用。

一、首先來看看ABP體系結構

ABP體系結構

領域層就是業務層,是一個項目的核心,所有業務規則都應該在領域層實現。
實體(Entity): 實體代表業務領域的數據和操作,在實踐中,通過用來映射成數據庫表。
倉儲(Repository): 倉儲用來操作數據庫進行數據存取。倉儲接口在領域層定義,而倉儲的實現類應該寫在基礎設施層。
領域服務(Domain service): 當處理的業務規則跨越兩個(及以上)實體時,應該寫在領域服務方法里面。
領域事件(Domain Event): 在領域層有些特定情況發生時可以觸發領域事件,并且在相應地方捕獲并處理它們。
工作單元(Unit of Work): 工作單元是一種設計模式,用于維護一個由已經被修改(如增加、刪除和更新等)的業務對象組成的列表。它負責協調這些業務對象的持久化工作及并發問題。

二、再來看看解決方案

解決方案

確定了解決方案下每個項目分別對應那一層后,我們開始創建Task實體。

三、創建Task實體

1.在領域層創建Tasks文件夾,并創建Task實體類;
2.ABP中所有的實體類都繼承自Entity,而Entity實現了IEntity接口;而IEntity接口是一個泛型接口,通過泛型指定主鍵Id類型,默認的Entity的主鍵類型是int類型。
創建Task,肯定需要保存創建時間,可以通過實現審計模塊中的IHasCreationTime來實現這種通用功能。代碼如下:

?

namespace LearningMpaAbp.Tasks {public class Task : Entity, IHasCreationTime{public const int MaxTitleLength = 256;public const int MaxDescriptionLength = 64 * 1024;//64kbpublic long? AssignedPersonId { get; set; }[ForeignKey("AssignedPersonId")]public User AssignedPerson { get; set; }[Required][MaxLength(MaxTitleLength)]public string Title { get; set; }[Required][MaxLength(MaxDescriptionLength)]public string Description { get; set; }public TaskState State { get; set; }public DateTime CreationTime { get; set; }public Task(){CreationTime = Clock.Now;State = TaskState.Open; ;}public Task(string title, string description = null) : this(){Title = title;Description = description;}}public enum TaskState : byte{Open = 0,Completed = 1} }

其中定義了TaskState狀態枚舉。并添加了AssignedPerson導航屬性,用來保存分配任務到某個用戶。其中[Required]、[MaxLength]特性是用來進行輸入校驗的。

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

?

//TODO: Define an IDbSet for your Entities...public IDbSet<Task> Tasks { get; set; }

4.執行Code First數據遷移。

  • 打開程序包管理器控制臺,默認項目選擇Entityframework對應的項目后。執行Add-Migration Add_Task_Entity,創建遷移。
  • 創建成功后,會在Migrations文件夾下創建時間_Add_Task_Entity格式的類文件。如果注意觀察,我們會發現Migrations文件夾下有個SeedData文件夾,顧名思義,這個文件夾下的類主要是用來進行預置種子數據的。我們可以參照已有類的寫法,來預置兩條Task。創建DefaultTestDataForTask類,代碼如下:

?

namespace LearningMpaAbp.Migrations.SeedData {public class DefaultTestDataForTask{private readonly LearningMpaAbpDbContext _context;private static readonly List<Task> _tasks;public DefaultTestDataForTask(LearningMpaAbpDbContext context){_context = context;}static DefaultTestDataForTask(){_tasks = new List<Task>(){new Task("Learning ABP deom", "Learning how to use abp framework to build a MPA application."),new Task("Make Lunch", "Cook 2 dishs")};}public void Create(){foreach (var task in _tasks){if (_context.Tasks.FirstOrDefault(t => t.Title == task.Title) == null){_context.Tasks.Add(task);}_context.SaveChanges();}}} }

然后在Configuration類中的Seed方法中,添加以下代碼。

?

new DefaultTestDataForTask(context).Create();
  • 在程序包管理器控制臺,輸入Update-Database,回車執行遷移。執行成功后,查看數據庫,Tasks表創建成功,且表中已存在兩條測試數據。

至此,Task實體類成功創建。
源碼已上傳至Github-LearningMpaAbp,可自行參考。



作者:圣杰
鏈接:https://www.jianshu.com/p/fde465ae599d
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

總結

以上是生活随笔為你收集整理的ABP入门系列(2)——领域层创建实体的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。