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

一、 反射

什么是反射?

简单点吧,反射就是在运行时动态获 取对象信息的方法,比如运行时知道对象有哪些属性,方法,委托等等等等。

反射有什么用呢?

反射不但让你在运行是获取对象的信息,还提 供运行时动态调用对象方法以及动态设置、获取属性等的能力。

反射在 ORM中有什么用呢?

我这里所讨论的ORM实现是通过自定义Attribute的方 式进行映射规则的描述的。但是我们并不知道具体哪个对象需要对应哪个表,并 且这些对象是独立于我们的ORM框架的,所以我们只能通过自定义Attribute来定 义映射规则,然后通过反射来动态获取这些映射规则。

反射的实现:

下面我们就以简单的获取对象的属性值的方式来做讨论,假设我们有类 Person,其中有3个属性Name、Age,Sex。我们通过反射的方法来动态获取 Person的对象的这三个属性的值。

public class Person
{
  private string _Name;
  private int _Age;
   private string _Sex;
  public string Name
  {
     get { return this._Name; }
    set { this._Name = value; }
  }
  public int Age
  {
    get { return this._Age; }
    set { this._Age = value; }
   }
  public string Sex
  {
    get { return this._Sex; }
    set { this._Sex = value; }
  }
}

时间: 2025-01-30 15:46:51

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

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最高隔离级别时范围锁将会被用到,这也就意味着直到事务开启到结束查询出的结果集是一致的以此来防止幻影.在该隔离级别中锁定的

基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - ORM体系的改进与ORM的新成员

      闲话不说了,接着前面的文章继续向大家汇报AgileEAS.NET 4.0本次重构的内容,AgileEAS.NET ORM体系的完善:本次重构调整了原有ORM的技术体系,并增加了新的Orm设计,同步兼容和支持原有Orm体系,原有的程序代码不经任务改变即可运行在新的平台之上.       有关于AgileEAS.NET原有的Orm体系请参考AgileEAS.NET之数据关系映射ORM与AgileEAS.NET之ORM访问器两篇文章.       本次Orm技术的更新最大的地方是增加了新的

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(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[a