您的位置:首页 > 其它

ORM映射框架总结--数据操作(二)

2010-01-01 10:53 381 查看
1.TableInfo 封装实体特性类

代码

1 /**
2 *
3 * 2009-4-11
4 *
5 *
6 * 表实体的特性信息缓存,可以设置或取得特性信息
7 * */
8 using System;
9 using System.Collections.Generic;
10 using System.Linq;
11 using System.Text;
12 using System.Reflection;
13
14 namespace CommonData.Model
15 {
16 public static class EntityTypeCache
17 {
18 private static Dictionary<Type, TableInfo> cache = null;
19
20 /// <summary>
21 /// 静态构造方法,确保该构造方法只执行一次,不会还原初始化值
22 /// </summary>
23 static EntityTypeCache()
24 {
25 cache = new Dictionary<Type, TableInfo>();
26 }
27
28 /// <summary>
29 /// 更具type类型,将实体特性缓存
30 /// </summary>
31 /// <param name="type">实体类型</param>
32 /// <param name="tableInfo">实体特性</param>
33 public static void InsertTableInfo(Type type,TableInfo tableInfo)
34 {
35 if(cache.ContainsKey(type))
36 {
37 return;
38 }
39 else
40 {
41 cache.Add(type,tableInfo);
42 }
43 }
44
45 /// <summary>
46 /// 更具IEntity公共实体接口,将实体特性缓存
47 /// </summary>
48 /// <param name="entity">实体接口</param>
49 /// <param name="tableInfo">实体特性</param>
50 public static void InsertTableInfo(IEntity entity, TableInfo tableInfo)
51 {
52 Type type = entity.GetType();
53 InsertTableInfo(type,tableInfo);
54 }
55
56 /// <summary>
57 /// 更具实体类型获得特性信息
58 /// </summary>
59 /// <param name="type">实体类型</param>
60 /// <returns></returns>
61 public static TableInfo Get(Type type)
62 {
63 if (cache.ContainsKey(type))
64 {
65 return cache[type];
66 }
67 else
68 {
69 return null;
70 }
71 }
72
73 /// <summary>
74 /// 更具公共实体接口获得实体特性信息
75 /// </summary>
76 /// <param name="entity">公共实体接口</param>
77 /// <returns></returns>
78 public static TableInfo Get(IEntity entity)
79 {
80 Type type = entity.GetType();
81 return Get(type);
82 }
83
84 /// <summary>
85 /// 更具泛型类型获得实体特性信息
86 /// </summary>
87 /// <typeparam name="T">泛型类型</typeparam>
88 /// <returns></returns>
89 public static TableInfo Get<T>() where T:IEntity
90 {
91 Type type=typeof(T);
92 if (cache.ContainsKey(type))
93 {
94 return cache[type];
95 }
96 else
97 {
98 return null;
99 }
100 }
101 }
102 }

   这个类主要运用的知识是反射,都知道反射可以说是C#语言的灵魂(自我感觉),因为它可以获得数据的原始信息,在Java中的几个框架中都大量运用了反射。这个类都是采用的static 修饰符,静态类静态变量。第一,静态类是在程序域加载的时候加载的,第二 静态类可以全局共享。因此在这里以后读取这些信息的时候不用每次都去反射,第一次反射之后就缓存了这些数据,以后直接用就可以了。这是在性能方面的体现。这个类中还运用了一个IEntity 接口,这个接口是所有实体类的公共接口。在下面将讲解到这个类。使用接口的好处在这里也能体现出来,因为我还不知道实体类的属性有哪些,实体名称都不知道。接口给了一个抽象的概念

  这个类有三个地方值得注意:

  1. private static Dictionary<Type, TableInfo> cache = null; 使用字典类型数据存储,根据键值对存储数据时非常方面查找的。

  2.static EntityTypeCache()
{
cache = new Dictionary<Type, TableInfo>();
}

   构造方法使用静态static 修饰符。静态构造方法,确保该构造方法只执行一次,不会还原初始化值,这就保证了数据缓存全局共享的作用。如果是Web程序我们可能会想到用Application来存储数据,如果脱离了Web程序呢,因此我们需要有自己的缓存机制。

  3. public static TableInfo Get<T>() where T:IEntity
{
Type type=typeof(T);
if (cache.ContainsKey(type))
{
return cache[type];
}
else
{
return null;
}
}

  这个方法是一个泛型方法,泛型不用多说了,.net平台中不可缺少了,大大增加了语言的灵活性。关键是这个方法后面的约束,使用此约束保证了我们使用的实体类是实现了IEntity 接口的实体类。这是一种很霸道的写法,当然这是笑话。这样可以保证程序的准确性
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: