上一篇文章寫了關於項目的基本開發組織和項目用到的一些東西,這篇文章就開始設計實體模型了,好了,廢話不多說。
一、實體模型基類
因為每個模型實體都需要有一個編號,狀態這些基本的東西,為了遵守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
}