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 ...
随机推荐
- tf.nn.conv2d 参数介绍
tf.nn.conv2d是TensorFlow里面实现卷积的函数,参考文档对它的介绍并不是很详细,实际上这是搭建卷积神经网络比较核心的一个方法,非常重要 tf.nn.conv2d(input, fil ...
- Java并发编程原理与实战四十三:CAS ---- ABA问题
CAS(Compare And Swap)导致的ABA问题 问题描述 多线程情况下,每个线程使用CAS操作欲将数据A修改成B,当然我们只希望只有一个线程能够正确的修改数据,并且只修改一次.当并发的时候 ...
- angularJS $routeProvider
O'Reilly书上的伪代码 var someModule = angular.module('someModule',[...module dependencies]); someModule.co ...
- lxml视频讲座
lxml视频讲座 Winfortune 01 - How to create an equivalent of fortune and cowsay for Windows, using Python ...
- soj1090.Highways
1090. Highways Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description The island nation of ...
- asp.net菜鸟到中级程序员的飞跃 --30本好书点评
如果你是一个菜鸟或者自认为初学者那么本文非常适合你:不能说这30本书就是最佳组合,但是可以说这个组合不差:本人曾博览群书,很多书重复,很多书讲的不适用,这些书都是目前书店可以买到的:达到中级程序员以后 ...
- python最大最小距离算法贴近度评价法
1.大最小贴近度评价法 概念: 贴近度表示两个模糊几何之间的彼此接近程度,在模糊模式识别方法中采用贴近度的大小识别待判别模糊子集的模式类别.为衡量待识别子集的类别,需要判别各个阶段与标杆模糊集合之间的 ...
- 【转换】Bean、List、Map、Array、String与JSON字符串的相互转换
import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.math.BigDecimal; i ...
- 系统学习(javascript)_基础(数据类型一)
五种基本数据类型:Number,String,Boolean,Null,Undefind: 三种引用数据类型:Object,Array,Symbol: Symbol为ECMAScript6新增的数据类 ...
- 20165227 实验二《Java面向对象程序设计》实验报告
2017-2018-4 20165227实验二<Java面向对象程序设计>实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉 ...