線上醫療平臺開發實戰05-StackService.Ormlite基本配置和資料庫建模
阿新 • • 發佈:2019-01-03
StackService.Ormlite 安裝
在專案中DAL層和DTO層與資料訪問相關,這兩層需要新增對StackService.Ormlite的引用。
使用Nuget安裝,DAL層直接安裝Ormlite的SQL Server驅動:
Install-Package ServiceStack.OrmLite.SqlServer -ProjectName LPY.LeHealth.DAL
DTO這一層只會用到ServiceStack.OrmLite,直接安裝:
Install-Package ServiceStack.OrmLite -ProjectName LPY.LeHealth.DTO
基本配置
StackService.Ormlite提供了一系列對Ado.net核心物件的擴充套件方法,所以在使用上不需要進行太多配置,和Ado.net一樣設定好資料庫連線字串即可連線,進行資料庫操作。
為了提高程式的複用性,提取一個DAL層的基類:BaseDAL
public class BaseDAL { #region 資料庫配置 public BaseDAL() { //設定方言 OrmLiteConfig.DialectProvider = ServiceStack.OrmLite.SqlServerDialect.Provider; //設定命名策略 OrmLiteConfig.DialectProvider.NamingStrategy = new PrefixLowercaseNamingStrategy() { TablePrefix = "t_" }; } /// <summary> /// 資料庫連線 /// </summary> public IDbConnection DbConnection { get { return DbFactory.OpenDbConnection(); } } /// <summary> /// 獲取連線字串 /// </summary> public virtual string ConnectionString { get { return ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; } } private OrmLiteConnectionFactory conFactory; /// <summary> /// 連線工廠 /// </summary> public OrmLiteConnectionFactory DbFactory { get { if(null==conFactory) { conFactory=new OrmLiteConnectionFactory(ConnectionString, ServiceStack.OrmLite.SqlServerDialect.Provider); } return conFactory; } } #endregion }
StackService.Ormlite支援多資料庫,所以在建構函式裡,得指定使用SQL Server方言來匹配SQL Server資料庫操作:
OrmLiteConfig.DialectProvider = ServiceStack.OrmLite.SqlServerDialect.Provider;
為了避免DTO中的類名轉換為資料庫中表名與資料庫關鍵字衝突,這裡我們自定義了一個對映為資料庫表名的規則,資料庫表名=t_+類名。
OrmLiteConfig.DialectProvider.NamingStrategy = new PrefixLowercaseNamingStrategy() { TablePrefix = "t_" };
資料庫建模
基本配置完成之後,接下來要使用資料庫,先要建模。先定義DTO模型,這裡以使用者表為例:
使用者DTO定義
using ServiceStack.DataAnnotations;
/// <summary>
/// 使用者DTO
/// </summary>
public class UserDTO
{
[AutoIncrement]
public int Id { get; set; }
/// <summary>
/// 使用者名稱
/// </summary>
public string Name { get; set; }
/// <summary>
/// 密碼
/// </summary>
public string Password { get; set; }
/// <summary>
/// 使用者角色
/// 0:使用者, 1 :醫院, 2:管理員
/// </summary>
public int RoleId { get; set; }
}
模型會自動將屬性名Id作為資料庫主鍵,新增[AutoIncrement]
特性,設定為自增。
定義好DTO之後,我們就可以使用進行資料庫自動建模了,為了方便管理,建立一個DataManager的資料庫管理類:
using LPY.LeHealth.DTO;
using ServiceStack.OrmLite;
/// <summary>
/// 資料庫管理類
/// </summary>
public class DataManager:BaseDAL
{
/// <summary>
/// 初始化資料庫
/// </summary>
/// <returns></returns>
public bool Initial()
{
//建立使用者表
DbConnection.DropAndCreateTable<UserDTO>();
//新增測試賬號
var usr = new UserDTO();
usr.Name = "admin";
usr.Password = "admin";
new UserDAL().Add(usr);
return true;
}
}
該類繼承BaseDAL,在需要用到IDbConnection時,直接使用基類的DbConnection屬性,DropAndCreateTable<T>
方法可以根據T的定義現刪除已有表並生成相應的資料庫中表。
檢視資料庫生成的表結構:
後續如果需要新增表,直接在Initial方法中進行新增。