C#实现简单ORM

本文讲述了作者在实现C#简单ORM过程中遇到的问题及解决方案,包括对象关系映射、反射与Attribute的运用,以及如何处理SQL语句的生成、主键、字段映射和可空字段。通过对实体类添加Attribute特性,结合反射获取数据库表信息,实现了实体类到数据库表的映射。
摘要由CSDN通过智能技术生成

闲话

当天在布置这个任务的时候,一听,实现增删改查,我还天真的想:作业这么简单的么?可是到了实际开始操作的时候才恍然大悟,只恨自己太年轻啊。对于ORM,我的认识还停留在学习java的室友使用的Hibernate上,曾经有一份Entity Framework的教程放在我的面前,我没有珍惜,如果给我一次重新选择的机会,我会好好学习,如果非要给这个学习加上一个权限,我希望是一万年。开个玩笑,虽然对相关知识的不熟悉导致初期很吃力,但终归是完成了,现在缝缝补补,终于看起来像点样子了,这里就对这次ORM作业的完成过程做一个总结,回顾在这个过程中遇到的问题以及解决办法,也趁此机会梳理一下思路。
拿到任务代码的框架,一打开,迎面而来的便是绝望的气息。摆在我面前的是那四个空空如也待实现的方法,而自己完全不知道从哪里下手,于是乎,打开示例代码,网上了解ORM,照着葫芦画瓢,开始code。通过简单的了解,整理出了几点实现这个任务需要的知识,对象关系映射,怎么个映射法?定义的实体类如何和数据表联系起来?反射和Attribute怎样实现前面的问题?这些都需要一一的去解决。
反射和Attribute
突然一来就开始讲反射和Attribute,可能觉得有点突兀,那为什么要在一开始就提到这两个东西呢?由于实现的是简单ORM,所以采用的是一个类映射到一个表的模式,实体类中的属性(Property)和数据库表里的字段一一对应。为了到达这样效果,我们就需要采用反射和Attribute相互合作的模式。Lewis.X.Liu (g-mis.cncd02.Newegg) 42241 > 2017/07/21 > C#实现简单ORM个人心得 > 表关系.jpg
Attribute:MSDN的定义为:公共语言运行时允许添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据(metadata)保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。所以Attribute就是用来为元素添加附加信息的,可以让我们定义具体的映射规则,而通过反射我们又可以动态获取对象信息的能力来获得这些规则。从而实现了实体类到具体的数据库表的映射。特别指出,Attribute和Property中文都为属性,但是Property是实体类中的属性,而Attribute是用于提供附加信息,为坐区分,叫作特性。在本次代码中,定义了三个Attribute,通过他们来描述部分数据库信息。

//表特性
[AttributeUsage(AttributeTargets.Class,
        AllowMultiple = false,
        Inherited = true)]
    public class TableAttribute : System.Attribute
    {
        public string tableName { get; set; }
        public TableAttribute(string name)
        {
            tableName = name;
        }
    }

//列特性
[AttributeUsage(AttributeTargets.Property,
        AllowMultiple = false,
        Inherited = true)]
    public class ColumnAttribute : System.Attribute
    {
        public bool IsPrimaryKey { get; set; }
        public string  Name { get; set; }
        
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值