码迷,mamicode.com
首页 > 其他好文 > 详细

CRL数据映射工作原理

时间:2014-06-29 19:02:49      阅读:268      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   使用   strong   

CRL并不直接对数据库进行操作,它只会处理生成对应的SQL语句和参数,由委托注入的数据访问对象来执行,目前采用CoreHelper.SqlHelper

因此,需要在Gblobal中实现数据访问委托,在委托方法中,可根据type区分是由哪一个业务创建的委托,从而达到多数据库的实现

通过封装的数据结构检查方法,可以编程方式对数据库里表结构进行同步

整体过程如下

bubuko.com,布布扣

同理,如果需要增加多数据库类型支持,只需增加对应的数据库访问和查询语法转换即可(需改进增加接口,未来版本实现)

查询转换时,简单的逻辑运算可直接转为SQL,大于,小于,等于,或,但一些比较特殊的语法则需要借助扩展方法进行处理

扩展方法如下:

  1  /// <summary>
  2     /// 查询扩展方法,请引用CRL命名空间
  3     /// </summary>
  4     public static partial class ExtensionMethod
  5     {
  6         /// <summary>
  7         /// lamada传入方法,传入要查询的字段
  8         /// 示例:b.SelectField(b.Id, b.Name)
  9         /// </summary>
 10         /// <param name="args"></param>
 11         /// <returns></returns>
 12         public static bool SelectField(this IModelBase s, params object[] args)
 13         {
 14             return true;
 15         }
 16         /// <summary>
 17         /// Like("%key%")
 18         /// </summary>
 19         /// <param name="s"></param>
 20         /// <param name="likeString"></param>
 21         /// <returns></returns>
 22         public static bool Like(this string s,string likeString)
 23         {
 24             if (string.IsNullOrEmpty(likeString))
 25                 throw new Exception("参数值不能为空:likeString");
 26             return s.IndexOf(likeString) > -1;
 27         }
 28         /// <summary>
 29         /// NotLike("%key%")
 30         /// </summary>
 31         /// <param name="s"></param>
 32         /// <param name="likeString"></param>
 33         /// <returns></returns>
 34         public static bool NotLike(this string s, string likeString)
 35         {
 36             if (string.IsNullOrEmpty(likeString))
 37                 throw new Exception("参数值不能为空:likeString");
 38             return s.IndexOf(likeString) == -1;
 39         }
 40         /// <summary>
 41         /// 字符串 In("‘1312‘,‘123123‘")
 42         /// </summary>
 43         /// <param name="s"></param>
 44         /// <param name="inString"></param>
 45         /// <returns></returns>
 46         public static bool In(this string s, string inString)
 47         {
 48             if (string.IsNullOrEmpty(inString))
 49                 throw new Exception("参数值不能为空:inString");
 50             return s.IndexOf(inString) > -1;
 51         }
 52         /// <summary>
 53         /// 字符串 NotIn("‘1312‘,‘123123‘")
 54         /// </summary>
 55         /// <param name="s"></param>
 56         /// <param name="inString"></param>
 57         /// <returns></returns>
 58         public static bool NotIn(this string s, string inString)
 59         {
 60             if (string.IsNullOrEmpty(inString))
 61                 throw new Exception("参数值不能为空:inString");
 62             return s.IndexOf(inString) == -1;
 63         }
 64         /// <summary>
 65         /// 数字 In(12312,12312)
 66         /// </summary>
 67         /// <param name="s"></param>
 68         /// <param name="values"></param>
 69         /// <returns></returns>
 70         public static bool In(this int s, params int[] values)
 71         {
 72             if (values==null)
 73                 throw new Exception("参数值不能为空:inString");
 74             return true;
 75         }
 76         /// <summary>
 77         /// 数字 NotIn(1231,1231)
 78         /// </summary>
 79         /// <param name="s"></param>
 80         /// <param name="values"></param>
 81         /// <returns></returns>
 82         public static bool NotIn(this int s, params int[] values)
 83         {
 84             if (values == null)
 85                 throw new Exception("参数值不能为空:inString");
 86             return true;
 87         }
 88         /// <summary>
 89         /// 枚举转换为INT
 90         /// </summary>
 91         /// <param name="e"></param>
 92         /// <returns></returns>
 93         public static int ToInt(this Enum e)
 94         {
 95             return Convert.ToInt32(e);
 96         }
 97         public static bool Between(this DateTime time, DateTime begin, DateTime end)
 98         {
 99             return true;
100         }
101         /// <summary>
102         /// 
103         /// </summary>
104         /// <param name="time"></param>
105         /// <param name="format">比较方式,M,D,H</param>
106         /// <param name="compareTime">比较时间</param>
107         /// <param name="compare">如何比较, =0 >0</param>
108         /// <returns></returns>
109         public static bool DateDiff(this DateTime time, string format, DateTime compareTime, string compare)
110         {
111             return true;
112         }
113         public static bool ContainsString(this string str, string value)
114         {
115             return true;
116         }
117     }

调用示例 DateDiff

b => b.AddTime.DateDiff("d", date, "=0")

Like

b => b.Name.Like("%小明%")

由于Lamada解析问题,语法目前只能属性在左,变量在右,不然会引发解析出错,系统自带逻辑方法不会进行转换,使用后出会引发解析错误

 

CRL数据映射工作原理,布布扣,bubuko.com

CRL数据映射工作原理

标签:style   blog   http   color   使用   strong   

原文地址:http://www.cnblogs.com/hubro/p/3814920.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!