版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第13章包括使用反射和属性配置ORM框架、13.1ORM背景、13.2基础知识、13.3软件设计、13.4软件开发、13.5部署ORM框架、13.1ORM背景、ORM是英文Object/RelationMapping的简要记录,并以中文提供是为了解决面向对象编程思想和关系数据库技术存在的不一致问题而提出的技术思想。数据库行业中主流的数据库在数学和实践上相当成熟,是使用广泛使用的关系数据结构模型的关系数据库。在业界,面向对象编程思想及其衍生思想成为主流。13.2基础知识,13.2.1反射和特性1。反射反射。NET框架提供的高级编程接口,用于获取元数据类型的技术。在C#编程语言中,程序集在加载时提
2、供描述自身的元数据结构,通过这些描述的元数据结构应用反射技术来获取集合中包含的类型、成员、属性、接口、方法等信息,并且可以使用反射技术根据运行时指定的类的名称创建类的实例。13.2.1反射和属性,示例13.1程序中的System。编写描述如何使用Type查询类型信息的控制台程序。实施步骤包括:(1)创建名为“ExTypeInfo”的控制台应用程序。(2)在Program.cs代码文件中创建类“employee”,例如internalclassEmployeepringtam _ name。publicsringnamegetreturnm _ name;Setm _ name=value将以下
3、代码添加到、13.2.1反射和属性的Main方法中,(3)获取和输出Employee类实例的类型信息:代码如下:employeemloyee=newEmployee();TypeobjType=emloyee。GetType();控制台。Write(类型名称:)Console。WriteLine(objType .name);控制台。WriteLine(完整类型:)console . WriteLine(objtype . full name);控制台。WriteLine(命名空间:)console . WriteLine(objtype . namespace);控制台。WriteLine(
4、模块:)console . WriteLine(objtype . module . name);控制台。WriteLine(集合:)console . WriteLine(objtype . assembly . full name);控制台。WriteLine(默认类名:)console . WriteLine(objtype . base type . full name);控制台。WriteLine(是否为类:)console . WriteLine(objtype . is class?是:否);控制台。WriteLine(是否为公共类:)console . WriteLine(ob
5、jtype . is public?是:否);13.2.1反射和特性,(4)运行程序,如图13.1所示。13.2.1反射和特性,2特性特性也。NET框架提供的高级编程手段。附加到编程单元(如类型、字段、属性和函数)的其他信息与Access数据库中表格和字段的说明文本相同。特性使用应用程序的主入口点:/,如以下段代码所示:/system . stathreadticvoidmain()application . run(newfrmtestorm();由于NETFramework中的所有类都派生自Object,因此在Object类中定义的每个方法都可以用于系统中的所有对象。Object类别的一般
6、方法如表格13.1所示。13.2.3Hashtable类、Hashtable类的常用方法和属性如表13.2和表13.3所示。13.2.3Hashtable类、表13.3Hashtable类的公用属性、13.2.4TypeConverter类和TypeConverter类的通用方法如表13.4所示。13.2.5TypeDescriptor类,TypeDescriptor类为System .ComponentModel命名空间提供有关组件属性(Attribute)、属性(Property)和事件等组件属性的信息。表13.5显示了这些服务。TypeDescriptor类的常用方法和属性列在表13.6
7、和表13.7中。13.2.6IFormattable接口,示例13.2编写控制台程序以定义实现IFormattable接口的Temperature类。此类支持四个格式说明符(g和c),表示温度以摄氏度表示。f,表示温度用华氏度表示。k,表示温度以开尔文度表示。实施步骤包括:(1)创建名为“TemperatureFormat”的控制台应用程序。(2) Program.cs代码文件中的命名空间“usingSystem .Globalization添加创建从IFormattable接口继承的 Temperature 类。此类为:,13.2.6IFormattable接口,(3)向Main方法添加以下
8、代码,以其他方式显示:代码如下:temperature temp 1=new temperature(0);控制台。WriteLine(0:C(摄氏)=0333690k(克尔)=0333690f(华氏)n,temp 1);temp 1=new temper ature(-40);console . writeline(string . format(culture info . current culture,0333690c(华氏)=0333690k(克尔氏)=0333690fconsole . writeline(string . format(fr-fr),0333690c(华氏)=0:
9、K(克尔氏)=0333690f(华氏)n,0333690ftemp 1=new temper ature(32);Console.writeline(华氏0度)=1(开尔文)=2(华氏)n、temp1.tostring (c)、temp1.tostring (k)、tempp 1 . tostringtemp 1=new temper ature(100);numberformatinfocurrent=number formatinfo . current info;culture infonl=newculture info(nl-nl);Console.writeline(华氏0度)=1
10、(开尔文)=2(华氏),temp1.tostring (c,current),temp1.tostring (k,)Console.writeline(华氏0度)=1(开氏温度)=2(华氏)、temp1.tostring (c,nl)、temp1.tostring (k,nl),13.2.6IFormattable界面,(4)运行程序,如图13.2所示。13.2.7PropertyInfo类、ProperyInfo类的常用方法和属性列在表13.8和表13.9中。表13.8ProperyInfo类的常规方法,13.2.7PropertyInfo类,表13.9ProperyInfo类的常规属性,1
11、3.2.8BindingFlags枚举和BindingFlags枚举的常规成员列在表13.10中示例13.3编写控制台程序以定义Employee类,该类描述了BindingFlags枚举的应用。实施步骤包括:(1)创建名为“BindingFlagsEx”的控制台应用程序。13.2.8BindingFlags枚举,(2) Program.cs代码文件中的命名空间 usingSystem .Reflection单击“添加”,然后使用名为classEmployeepublicintage的代码编写“Temperature”类。Privatestring _ namepublic employee()
12、publicsringnamegetreturn _ name;Set _ name=valuePublicintGetAge(inta)returna;public void interest(string str)console . writeline(str);13.2.8BindingFlags枚举,(3) Main方法中的employee=new employee();Typetype=employee。GetType();Objectobj=type.invokember (null,binding flags . declared only | binding flags . p
13、ublic | binding flags . non public | binding/没有返回值的type.invokember (interest,binding flags . invokee method | binding flags . public | binding flags . instance,null/具有返回值的inti=(int)type . invokeer member(ge tage,binding flags . invokee method | binding flags . public | binding控制台。WriteLine(I);/设定属性值
14、type.invokember (name,binding flags.setproperty,null,obj,new string王林)。/获取属性值string str=(string)type . invokember(name,binding flags.getproperty,null,obj,null);控制台。WriteLine(str);/设置字段值type.invokember (age,binding flags.setfield,null,obj,new object27)。/获取字段值intf=(int) type.invokember (age,binding fl
15、ags.getfield,null,obj,null);控制台。WriteLine(f);13.2.8BindingFlags枚举,(4)运行程序,如图13.3所示。13.2.9IEnumerable接口Enumerable接口是System .在Collections命名空间中,提供返回环回访问集合的GetEnumerator方法。示例13.4编写控制台程序以演示如何实现自定义集合的IEnumerable和IEnumerator界面。在此示例中,没有明确调用这些接口的成员,但实现了使用foreach循环来支持对集合的访问。实施步骤包括:(1)创建名为“IEnumerableEx”的控制台应用
16、程序。(2) Program.cs代码文件中的命名空间“usingSystem .Collections单击“添加”,然后使用以下代码创建类“Person”、“People”和“PeopleEnum”:13.2.9IEnumerable接口,(3)向Main方法添加代码。(4)运行程序,如图13.4所示。13.2.10Activator类,Activator类是.支持NET程序集和COM对象的动态生成。您可以通过CreateComInstanceFrom、CreateInstance和GetObject四种静态方法加载COM对象或程序集,并生成指定类型的实例,如表13.11中所示。13.3软件
17、设计,图13.5是一个映射关系示例,其中数据库中有一个名为Employees的数据表,开发人员定义了DB_Employees类型。13.3软件设计,1 .数据库查询,返回对象使用此功能,框架可以根据指定的SQL查询语句和对象类型查询数据库,根据查询结果创建多个对象,并将刚创建的对象的属性值设置为字段值。此功能要求首先指定SQL查询语句和对象类型。2.将对象插入数据库在此功能中,框架程序使用反射获取附加到对象类型的BindTableAttribute特性,并获取该对象映射的数据表名称;然后遍历所有公共实例属性,如果属性附加了BindFieldAttribute属性,则获取该属性映射中的字段名。然
18、后收集映射到所有属性值的字段名,并使用字符串片段生成Insert类型的SQL语句。13.3软件设计,3 .根据对象修改数据库记录在此功能中,框架程序使用指定的对象实例修改数据库中的记录。并且,对象类型中的一个或多个属性附着了主键字段映射特性。框架程序使用反射获取附加到对象类型的BindTableAttribute特性,获取该对象映射的数据表名称,然后遍历属性,以获取对象属性和数据库字段之间的映射关系。4.根据对象删除数据库记录在此功能中,框架程序可以通过以下方法删除数据库记录:获取对象类型绑定的数据表名称,导航到已添加绑定主键字段的所有特性,然后组合“DeleteFrom数据表名称Where主键
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光伏发电清洗外包合同
- 厂区水电维修外包合同
- 亚马逊网店托管外包合同
- 公寓装修施工外包合同
- 供水管网维修外包合同
- 信用卡分期人员外包合同
- 开平信息化劳务外包合同
- 国企采购劳务外包合同
- 厨师团队劳务外包合同
- 抖音主播审核外包合同
- 雨课堂学堂在线学堂云《智能控制技术(南通)》单元测试考核答案
- 绵阳经开区2026年度定向招聘社区专职工作者(6人)考试模拟试题及答案解析
- 广州市2026年5月普通高三毕业班考前冲刺题(二)历史试卷(含答案)
- 2026年供销合作社笔试题库答案
- 动火作业监理实施细则
- 2026年软考-信息系统项目管理师真题及答案解析
- 2026年责任督学挂牌测试题及答案
- 产科子痫应急预案演练脚本
- 2026年全国安康杯安全知识竞赛题库含答案详解(突破训练)
- 2026内蒙古阿拉善盟事业单位招聘工作人员暨“智汇驼乡·鸿雁归巢”143人备考题库附答案详解(夺分金卷)
- 2026年担保业务岗位高频面试题包含详细解答
评论
0/150
提交评论