在线医疗平台开发实战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方法中进行添加。
相关文章推荐
- Oracle生成不重复票号 LPAD() 、RPAD() 函数 与 NEXTVAL() 函数概述
- MySQL远程代码执行(CVE-2016-6662)漏洞预警
- 我与数据库的故事
- redis.conf 配置详解
- SQLserver调用Excle数据
- SQL大圣之路笔记——SQL 创建索引 index
- oracle中统计重复几次的数据有几条
- 数据库调用储存过程底层代码的写法
- 初识Redis及Redis在Windows下的安装和使用
- 避免sql注入的方法
- spark-shell 读写hdfs 读写hbase 读写redis
- SQL中EXISTS怎么用
- Redis基础学习(四)—Redis的持久化
- linux下如何安装redis
- sql语句 (中 基础)
- sql语句 (上 基础)
- 防sql注入
- 利用mysql查询时遇到的语法错误
- SqlCommand类
- MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?