内部信息缓存
在轻量级ORM内部,会产生大量的与类相关的信息,在前面的博文里面,我已经记录了如何来存储这些信息,具体请见轻量级ORM开发系列:Model类相关信息的处理一文。这些相关的信息都是在ORM第一个请求的时候根据配置文件所配置的程序集来进行反射得到的,所以在第一个请求的时候花费的时间会比较长,这里我记录我所设计的一个缓存,能够很好的解决这个问题。
为了能够返回强类型的结果,我这里使用Dictionary作为内部存储结构而不是Hashtable,当然我知道很多成熟的ORM都是使用的Hashtable,不过我只是做一个轻量级的学习型开发,简单就好。这里的返回结果采用IDictionary接口进行返回。
具体代码如下:
public static class EntityList
{
private static IDictionary<string, EntityInfo> StaticDic = null;
static EntityList()
{
StaticDic = new Dictionary<string, EntityInfo>();
}
public static void InsertEntityInfo(string type,EntityInfo Info)
{
if (StaticDic.ContainsKey(type))
{
return;
}
else
{
StaticDic.Add(type,Info);
}
}
public static IDictionary<string, EntityInfo> GetDic()
{
return StaticDic;
}
public static void InsertEntityInfo( EntityInfo Info)
{
InsertEntityInfo(Info.TypeFullName, Info);
}
public static bool IsContain(string name)
{
return StaticDic.ContainsKey(name);
}
public static void InsertEntityInfo(IEntity entity, EntityInfo Info)
{
string type = entity.GetType().FullName;
InsertEntityInfo(type,Info);
}
public static EntityInfo GetEntityInfo(string type)
{
if (StaticDic.ContainsKey(type))
{
return StaticDic[type];
}
else
{
return null;
}
}
public static EntityInfo GetEntityInfo(IEntity entity)
{
string type = entity.GetType().FullName;
return GetEntityInfo(type);
}
public static EntityInfo GetEntityInfo<T>() where T:IEntity
{
string type = typeof(T).FullName;
return GetEntityInfo(type);
}
}
{
private static IDictionary<string, EntityInfo> StaticDic = null;
static EntityList()
{
StaticDic = new Dictionary<string, EntityInfo>();
}
public static void InsertEntityInfo(string type,EntityInfo Info)
{
if (StaticDic.ContainsKey(type))
{
return;
}
else
{
StaticDic.Add(type,Info);
}
}
public static IDictionary<string, EntityInfo> GetDic()
{
return StaticDic;
}
public static void InsertEntityInfo( EntityInfo Info)
{
InsertEntityInfo(Info.TypeFullName, Info);
}
public static bool IsContain(string name)
{
return StaticDic.ContainsKey(name);
}
public static void InsertEntityInfo(IEntity entity, EntityInfo Info)
{
string type = entity.GetType().FullName;
InsertEntityInfo(type,Info);
}
public static EntityInfo GetEntityInfo(string type)
{
if (StaticDic.ContainsKey(type))
{
return StaticDic[type];
}
else
{
return null;
}
}
public static EntityInfo GetEntityInfo(IEntity entity)
{
string type = entity.GetType().FullName;
return GetEntityInfo(type);
}
public static EntityInfo GetEntityInfo<T>() where T:IEntity
{
string type = typeof(T).FullName;
return GetEntityInfo(type);
}
}