Rookey.Frame之DAL工厂
昨天给大家介绍了表单验证功能,今天给大家介绍下Rookey.Frame框架的数据层工厂,由于Rookey.Frame框架ORM是基于servicestack.ormlite,很多朋友反映这个网上中文资料比较少,能不能用dapper或其他的替换掉,答案是肯定的,只在在Rookey.Frame.DALFactory下增加一个工厂类继承抽象工厂DalAbstractFactory,实现相关操作方法即可。
首先我们来看下DalAbstractFactory的实例化代码
/// <summary>
/// 实例化工厂
/// </summary>
/// <param name="factoryType">数据工厂类型</param>
/// <returns></returns>
public static DalAbstractFactory<T> GetInstance(DatabaseType factoryType)
{
switch (factoryType)
{
case DatabaseType.MsSqlServer:
{
IOrmLiteDialectProvider dialectProvider = SqlServerDialect.Provider;
return new OrmLiteDalFactory<T>(dialectProvider);
}
case DatabaseType.MySql:
{
IOrmLiteDialectProvider dialectProvider = MySqlDialect.Provider;
return new OrmLiteDalFactory<T>(dialectProvider);
}
case DatabaseType.Oracle:
{
IOrmLiteDialectProvider dialectProvider = OracleDialect.Provider;
return new OrmLiteDalFactory<T>(dialectProvider);
}
default:
{
IOrmLiteDialectProvider dialectProvider = SqlServerDialect.Provider;
return new OrmLiteDalFactory<T>(dialectProvider);
}
}
}
根据数据库类型进行抽象工厂实例化,这样我们很容易对Rookey.Frame的ORM进行替换和改造或增加,如果有更好的ORM可以很方便的接入,对上层项目没有任何影响。
在抽象工厂中还有两个属性ReadConnectionString、WriteConnectionString,读连接字符串和写连接字符串
/// <summary>
/// 读数据库连接串
/// </summary>
public string ReadConnectionString
{
get
{
return WebConfigHelper.GetConnectionString("DbReadConnString");
}
} /// <summary>
/// 写数据库连接串
/// </summary>
public string WriteConnectionString
{
get
{
string connSting = WebConfigHelper.GetConnectionString("DbWriteConnString");
if (!string.IsNullOrEmpty(connSting)) return connSting;
return ReadConnectionString;
}
}
这两个字符串的读取是根据之前介绍的数据库配置文件来的,在Rookey.Frame框架中基本上每个数据库操作方法都带有string connString = null这个参数,在数据抽象工厂实现层中会优化取用户传入的数据库连接字符串,为空时取配置的数据库连接
/// <summary>
/// 获取连接字符串
/// </summary>
/// <param name="connString">数据库连接字符串,调用方法是传入的数据库连接字符串</param>
/// <param name="read">是否读</param>
/// <returns></returns>
private string GetConnString(string connString, bool read = true)
{
string lastConnStr = !string.IsNullOrEmpty(connString) ? connString : (read ? this.ReadConnectionString : this.WriteConnectionString);
string modelConfigConnString = GetModelConfigConnString(read); //取模块数据库连接配置
if (string.IsNullOrEmpty(connString) && !string.IsNullOrEmpty(modelConfigConnString))
{
lastConnStr = modelConfigConnString;
}
NotNullCheck.NotEmpty(lastConnStr, "数据库连接字符串");
return lastConnStr;
}
/// <summary>
/// 获取所有实体集合
/// </summary>
/// <param name="references">是否加载导航属性</param>
/// <param name="connString">数据库连接字符串,调用方法时传入的连接字符串</param>
/// <returns></returns>
public override List<T> GetAllEntities(bool references = false, string connString = null)
{
string connStr = GetConnString(connString);
OrmLiteConnectionFactory factory = new OrmLiteConnectionFactory(connStr, _dialectProvider);
using (var conn = factory.OpenDbConnection())
{
try
{
SqlExpression<T> exp = conn.From<T>().ThenByDescending("Id");
if (references)
{
exp = exp.Limit(, );
}
List<T> list = references ? conn.LoadSelect<T>(exp) : conn.Select<T>(exp);
if (list == null) list = new List<T>();
return list;
}
finally
{
conn.Close();
conn.Dispose();
}
}
}
对于数据层抽象工厂的其他细节功能请下载最新框架源码了解,今天对DAL工厂就介绍到此地,下次介绍框架数据层,祝大家生活愉快!
Rookey.Frame之DAL工厂的更多相关文章
- Rookey.Frame v1.0极速开发平台稳定版发布
Rookey.Frame v1.0经过一年时间的修改及沉淀,稳定版终于问世了,此版本经过上线系统验证,各个功能点都经过终端用户验证并持续优化,主要优化以下几个方面: 1.性能较原来提升3倍之多 2.修 ...
- Rookey.Frame v1.0 视频教程发布了
经过昨天几个小时的折腾, Rookey.Frame v1.0开发视频教程终于发布了,由于是第一次做视频有很多地方做的不够好,后续我会慢慢改进,争取将视频教程做好. 本期发布视频: (一)Rookey. ...
- Rookey.Frame企业级极速开发框架
项目详细介绍 Rookey.Frame是一套基于.NET MVC + easyui的企业级极速开发框架,支持简单逻辑模块零代码编程.支持工作流(BPM).支持二次开发,具有高扩展性.高复用性.高伸缩性 ...
- Rookey.Frame v1.0快速开发平台-整体介绍
Rookey.Frame v1.0是一套基于.NET MVC的极速开发框架,支持简单逻辑模块零代码编程.支持二次开发,具有高扩展性.高复用性.高伸缩性. 框架特点 (1)简单逻辑模块实现零代码编程,通 ...
- Rookey.Frame企业级快速开发框架开源了
Rookey.Frame是一套基于.NET MVC + easyui的企业级极速开发框架,支持简单逻辑模块零代码编程.支持工作流(BPM).支持二次开发,具有高扩展性.高复用性.高伸缩性:应广大网友要 ...
- Rookey.Frame v1.0 视频教程之三发布-框架核心思想介绍
本期发布视频: (三)Rookey.Frame v1.0框架核心思想 介绍了Rookey.Frame v1.0框架搭建的核心思想,将框架核心思想理解清楚,对框架运行就会得心应手 官方视频教程: htt ...
- Rookey.Frame之实体表单验证
昨天给大家介绍了实体FluentValidation验证,今天继续给大家介绍表单验证,在Rookey.Frame框架中,表单验证有PrimaryKeyFields字段验证.唯一验证.必填验证.常用验证 ...
- Rookey.Frame之实体FluentValidation验证
昨天给大家介绍了Rookey.Frame框架的实体设计,今天继续跟大家分享实体的FluentValidation验证,在Rookey.Frame框架中可以设置多种验证方式:FluentValidati ...
- Rookey.Frame之实体类
上周跟大家分享了Rookey.Frame框架的初始化功能,今天继续给大家介绍实体类的设计. 先看下下面菜单实体示例代码: using Rookey.Frame.EntityBase; using Ro ...
随机推荐
- C++函数不能为virtual的场景
1.类函数不能同时被static和virtual修饰. 2.类的模板函数不能被virtual修饰 未完待续
- Calculus on Computational Graphs: Backpropagation
Calculus on Computational Graphs: Backpropagation Introduction Backpropagation is the key algorithm ...
- Web API: Security: Authentication and Authority
原文地址: http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-ap ...
- C++/C中的struct和typedef struct用法和区别
struct和typedef struct 分三块来讲述: 1 首先://注意在C和C++里不同 在C中定义一个结构体类型要用typedef: typedef struct Student { int ...
- linux命令-grep+正则表达式用法
目标文件/etc/passwd,使用grep命令或egrep 1.显示出所有含有root的行:egrep 'root' passwd 2.输出任何包含bash的所有行,还要输出紧接着这行的上下各两行的 ...
- Linux操作系统介绍
1Linux操作系统介绍 1.1linux系统的应用 服务器系统:Web应用服务器.数据库服务器.接口服务器.DNS.FTP等等: 嵌入式系统:路由器.防火墙.手机.PDA.IP 分享器.交换器.家电 ...
- Ubuntu 12.04 更新源的方法及地址
本文章转自:http://www.maybe520.net/blog/424/ 安装好ubuntu 12.04之后,可以联网之后,马上要做的最重要的事情之一就是配置更新源列表,这样以后安装更新或者软件 ...
- C++ Qt多线程 TcpSocket服务器实例
服务器: incomming incomming.pro #------------------------------------------------- # # Project created ...
- aarch64_l1
L-function-1.23-18.fc26.aarch64.rpm 2017-02-14 08:01 139K fedora Mirroring Project L-function-devel- ...
- Python之 context manager
在context manager中,必须要介绍两个概念: with as... , 和 enter , exit. 下文将先介绍with语句,然后介绍 __enter__和exit, 最后介绍cont ...