在线医疗平台开发实战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方法中进行添加。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值