您的位置:首页 > 数据库

在线医疗平台开发实战05-StackService.Ormlite基本配置和数据库建模

2016-09-13 21:03 387 查看

 


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方法中进行添加。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: