C#发现之旅:使用反射和特性构造自己的ORM框架(上)
2010-09-30 21:08:53 来源:WEB开发网BindTableAttribute演示了如何实现自己的特性。所有的特性都是从System.Attribute类型上面派生的,在定义类型时还使用System.AttributeUsage特性来表明这个自定义特性的使用范围,这里使用了Class样式,表示BindTableAttribute特性只能用在其它的Class类型前面,若放置在Interface或Struct类型前面,或者放在对象成员的前面则会出现编译错误。这里还是用语句 AllowMultiple=false 语句来表明对于一个类型,该特性只能用一次,若一个Class类型前面出现多个BindTableAttriubte,则会出现编译错误。若设置AllowMultiple=true,则该特性可以多次定义,也就是一个Class类型前面可以出现多个相同类型的特性。不过这里我们假设一个对象只能映射到一个数据表上,没有多重映射,因此就指明对同一个类型该特性不能多次使用。
特性也是一个Class类型,可以有多个构造函数,就像C#的new语句一样,我们向类型附加特性时可以使用不同的初始化参数来指明使用特性的那个构造函数。我们附加特性时还可以使用“属性名=属性值”的方法来直接指明特性的属性值。这有点类似VB中调用函数时使用“参数名=参数值”的语法。
该特性中定义了一个Name属性,该属性就是被修饰的对象所映射的数据库表的名称。框架程序就读取BindTableAttribute特性的Name值来作为数据对象映射的数据表名,若Name值为空则认为对象类型的名称就是映射的数据表的名称。
若对象没有附加BindTableAttribute特性,则该对象没有映射到任何数据表上,因此不能让框架程序使用它来操作数据库。
数据字段绑定信息 BindFieldAttribute类型
框架程序中定义了BindFieldAttribute类型,该类型就保存了对象的属性映射的数据库字段的名称,转换格式和关键字段样式,其源代码为
更多精彩
赞助商链接