1. 程式人生 > >線上醫療平臺開發實戰05-StackService.Ormlite基本配置和資料庫建模

線上醫療平臺開發實戰05-StackService.Ormlite基本配置和資料庫建模


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方法中進行新增。