C#基础系列:实现自己的ORM(MiniORM的测试代码)

看到有同学反馈,说MiniORM代码有Bug,也不知道怎么用,所以今天我就写了些测试代码。希望能够给点帮助。

同时也发现了两Bug,一并罗列出:

1、MiniORM.PubFuncs.GetObjectType()函数:

1.public static Type GetObjectType(string assemblyname, string namespacename, string classname)2.{3.    Type objType = (Type)_HashObjectType[assemblyname + namespacename + classname];4.5.    if (objType == null)6.    {7.        object obj = _HashObjectType[assemblyname + namespacename + classname];8.9.        obj = Assembly.Load(assemblyname).CreateInstance(namespacename + "." + classname);10.11.        _HashObjectType[assemblyname + namespacename + classname] = obj.GetType();12.13.        //需要增加这句14.        objType = (Type)_HashObjectType[assemblyname + namespacename + classname];15.    }16.17.    return objType;18.}

2、MiniORM.OrmWriter.CheckValidate()函数:

1.public void CheckValidate(object ModelObject)2.        {3.            PropertyInfo[] infos = ModelObject.GetType().GetProperties();4.            object[] CustomerAttributes = null;5.            object[] CustomerAttributes1 = null;6.7.            //SELECT ID FROM TableName WHERE @A='' OR @B='' 8.            string strSQL = "SELECT ID FROM {0} WHERE {1}";9.            string strTablename = PubFuncs.GetTableName(ModelObject);10.            string strWOA = "";11.            string strWHERE = "";12.            string strFieldMessage = "";13.            14.            foreach (PropertyInfo info in infos)15.            {16.                CustomerAttributes = info.GetCustomAttributes(typeof(MiniORMAttribute.DataFieldNotDoubleAttribute), false);17.                CustomerAttributes1 = info.GetCustomAttributes(typeof(MiniORMAttribute.DataFieldAttribute), false);18.19.                if (CustomerAttributes != null && CustomerAttributes1 != null)20.                {21.                    for (int i = 0; i < CustomerAttributes.Length; i++)22.                    {23.                        strWHERE += strWOA + ((MiniORMAttribute.DataFieldAttribute)CustomerAttributes1[0]).FieldName + "='" + info.GetValue(ModelObject, null) + "'";24.                        strFieldMessage += ((MiniORMAttribute.DataFieldAttribute)CustomerAttributes1[0]).FieldName;25.                        strWOA = " OR ";26.                    }27.                }28.            }29.30.            //这里需要做strWHERE不为空的判断31.            if (strWHERE.Trim() != "")32.            {33.                strSQL = string.Format(strSQL, new string[] { strTablename, strWHERE });34.35.                using (SqlConnection conn = new SqlConnection(PubFuncs.ConnectionStr))36.                {37.                    conn.Open();38.                    SqlCommand cmd = new SqlCommand();39.                    cmd.Connection = conn;40.                    cmd.CommandType = CommandType.Text;41.                    cmd.CommandText = strSQL;42.43.                    using (SqlDataReader rdr = cmd.ExecuteReader())44.                    {45.                        if (rdr.Read())46.                        {47.                            throw new Exception("下列字段值不能重复:" + strFieldMessage);48.                        }49.                    }50.                }51.            }52.        }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
classname
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-10-27 14:54:40

C#基础系列:实现自己的ORM(MiniORM的测试代码)的相关文章

JS基础系列之正则表达式_正则表达式

正则表达式是一个很牛逼的东东,今天在这里只是简单的给刚刚接触JS的人普及一下,里面若有争议的地方欢迎大家留言! 1.1 什么是正则表达式 ​ 正则表达式(regular expression)是一个描述字符模式的对象,ECMAScript的RegExp 类表示正则表达式,而String和RegExp都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数. ​ 正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具. 1.2 正则表达式的作用 ​ 正则表达式主要用来验证

Entity Framework 5.0基础系列

原文:Entity Framework 5.0基础系列 1.Entity Framework简介 http://www.cnblogs.com/aehyok/p/3315991.html 2.Entity Framework DBFirst尝试http://www.cnblogs.com/aehyok/p/3318892.html 3.Entity Framework ModelFirst尝试http://www.cnblogs.com/aehyok/p/3323438.html 4.Entit

网赚基础系列(三)网赚到底赚哪些人的钱?

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 网络创业与赚钱分不开,否则没有人会在网络创业. 关于到底赚哪些人的钱这个问题,我们一一分析. 1,国内外联盟. 谈到联盟,就涉及到了三方.广告主.联盟商.网站主.在这三方之间运作. 广告主提供产品等广告--去联盟商申请推广--网站主也就是站长去联盟平台申请广告代码挂在自己的站里或博客里.三方均按照点击.注册或销售付费. 以点击举个例子:比如我

JS基础系列之正则表达式

正则表达式是一个很牛逼的东东,今天在这里只是简单的给刚刚接触JS的人普及一下,里面若有争议的地方欢迎大家留言! 1.1 什么是正则表达式 ​ 正则表达式(regular expression)是一个描述字符模式的对象,ECMAScript的RegExp 类表示正则表达式,而String和RegExp都定义了使用正则表达式进行强大的模式匹配和文本检索与替换的函数. ​ 正则表达式用于对字符串模式匹配及检索替换,是对字符串执行模式匹配的强大工具. 1.2 正则表达式的作用 ​ 正则表达式主要用来验证

SQL Server-字字珠玑,一纸详文,完全理解SERIALIZABLE最高隔离级别(基础系列收尾篇)

前言 对于上述锁其实是一个老生常谈的话题了,但是我们是否能够很明确的知道在什么情况下会存在上述各种锁类型呢,本节作为SQL Server系列末篇我们 来详细讲解下. Range-Lock 上述关于RangeS-U.RangeS-S.RnageX-X以及还有RangeI-N这四种锁属于范围锁(Range-Lock)范畴.那么在什么情况下会存在范围锁呢,当在SERIALIZABLE最高隔离级别时范围锁将会被用到,这也就意味着直到事务开启到结束查询出的结果集是一致的以此来防止幻影.在该隔离级别中锁定的

C#基础系列:实现自己的ORM(构造我自己的ORM)

构造我自己的ORM 通过前面两章的描述,我相信很多朋友都已经明白 我了下面将要讨论到的ORM的实现方法了,那就是根据自定义Attribute来定义 O/R Mapping规则,然后通过反射来动态获取此规则,动态构造SQL语句. 由于这个小东西(ORM)出生在深圳,所以我想来想去,她应该有个深圳 的名字,所以我就叫她"MiniORM".不知道各位认为如何? MiniORM采用的是ONE_INHERIT_TREE_ONE_CLASS(一个继承树对应于一个 表)的结构,虽然这种结构容易导致数

C#基础系列:实现自己的ORM(ORM的基础概念)

ORM(O/R Mappping对象关系映射)的基础概念 在我们的系统中,存 在大量的需要进行持久化存储的对象,这些对象可能是各种各样的业务单据,也 可能是我们的系统配置信息等.另外一些属于内存中使用而不需要进行持久化存 储的对象,不属于我们的讨论范围.而在支持对象序列化的语言比如C#,Java中 ,我们可以将这些对象序列化到磁盘文件或者直接保存到关系数据库中.其中关 系数据库是我们最主要也是最安全的选择. 在对数据库中的业务数据进 行各种操作的时候我们发现,我们进行的大量的Insert.Upd

C#基础系列:实现自己的ORM(反射以及Attribute在ORM中的应用)

一. 反射 什么是反射? 简单点吧,反射就是在运行时动态获 取对象信息的方法,比如运行时知道对象有哪些属性,方法,委托等等等等. 反射有什么用呢? 反射不但让你在运行是获取对象的信息,还提 供运行时动态调用对象方法以及动态设置.获取属性等的能力. 反射在 ORM中有什么用呢? 我这里所讨论的ORM实现是通过自定义Attribute的方 式进行映射规则的描述的.但是我们并不知道具体哪个对象需要对应哪个表,并 且这些对象是独立于我们的ORM框架的,所以我们只能通过自定义Attribute来定 义映射

“数据结构基础”系列网络课程主页

前言 自从下决心要解决学生动手能力差的问题,开始了课程实践资源的建设之旅:自迷上了翻转课堂,所教课程的视频,也就逐渐形成了体系.在为我自己的校内学生服务的同时,也希望能够让更多人有机会用到. 自全身心投入教学,收入.奖金的渠道也便收缩到了极致.接受CSDN学院商业运作的规则,将课程投放此处,一则创收一些,弥补付出数倍精力建设资源而只能喝大锅饭中稀粥中的不平衡,二则因免费带来的不珍惜也让自己有些不快.课程定价大概等值于一张景区门票,或者一块生日蛋糕,愿者自行决定. 为天下IT学子服务的诺言不变,为