上一篇文章寫了關於項目的基本開發組織和項目用到的一些東西,這篇文章就開始設計實體模型了,好了,廢話不多說。
一、實體模型基類
因為每個模型實體都需要有一個編號,狀態這些基本的東西,為了遵守MVC的“不要重復自己”的原則,共有的東西就寫到一個公共類去,以前開發我都是用自增的Int作為主鍵,這一次呢就打算試用一下GUID作為數據庫的主鍵編號,要是有不懂的地方,大家趕緊指出來啊~~
有碼有真相:
/// <summary> /// 模型基類 /// </summary> public class BaseEntity { private string id; [Key] [Display(Name = "主鍵")] public string Id { get { if (id == null) { return Guid.NewGuid().ToString(); } else { return id; } } set { id = value; } } [Display(Name = "狀態")] [Required(ErrorMessage = "狀態不能為空!")] public bool Enabled { get; set; } }
二、實體模型
tbUser 【用戶模型】
tbRole 【角色模型】
tbModule 【系統模塊模型】
tbAction 【系統行為模型】
tbActionLog 【行為日志模型】
三、模型之間的關系
用戶模型對應多個角色模型,角色模型對應多個用戶模型,也就是說一個用戶能屬於多個角色,一個角色擁有N多個用戶;
角色模型對應多個系統模型,也就是說一個角色擁有多個系統模塊的權限。
系統行為模型和系統行為日志模型就是一個日志而已,大家看看肯定讷讷感懂的,我就不墨跡了。
四、數據訪問接口層和數據訪問實現層的公共類的實現
IBaseDao 數據訪問接口層,代碼如下:
/// <summary> /// 增刪改查的公共接口,這個接口定義泛型的增刪改查 /// </summary> /// <typeparam name="T">實體</typeparam> public interface IBaseDao<T> { #region 查詢普通實現方案(基於Lambda表達式的Where查詢) /// <summary> /// 獲取所有Entity /// </summary> /// <param name="exp">Lambda條件的where</param> /// <returns></returns> IEnumerable<T> GetAllEntities(Func<T, bool> exp); /// <summary> /// 計算總個數(分頁用到) /// </summary> /// <param name="exp">Lambda條件的where</param> /// <returns></returns> int GetEntitiesCount(Func<T, bool> exp); /// <summary> /// 分頁查詢(Linq分頁方式) /// </summary> /// <param name="pageNumber">當前頁</param> /// <param name="pageSize">分頁大小</param> /// <param name="orderName">lambda排序名稱</param> /// <param name="sortOrder">排序,升序or降序</param> /// <param name="exp">lambda查詢條件where</param> /// <returns></returns> IEnumerable<T> GetEntitiesForPaging(int pageNumber, int pageSize, Func<T, string> orderName, string sortOrder, Func<T, bool> exp); /// <summary> /// 根據條件查找單個實體 /// </summary> /// <param name="exp">lambda查詢條件where</param> /// <returns></returns> T GetEntity(Func<T, bool> exp); #endregion #region 添刪改 /// <summary> /// 插入實體 /// </summary> /// <param name="entity"></param> /// <returns></returns> bool Insert(T entity); /// <summary> /// 更新實體 /// </summary> /// <param name="entity"></param> /// <returns></returns> bool Update(T entity); /// <summary> /// 刪除實體 /// </summary> /// <param name="entity"></param> /// <returns></returns> bool Delete(T entity); #endregion }