我实现了一个简单的EF框架,主要用于操纵数据库。实现了对数据库的基本操纵--CRUD

这是项目结构 这是一个 core 下的 DLL

Core1.1环境下,自己实现的一个简单的CRUD框架(反射实现)

写了一个数据库工厂,用于执行sql语句。调用sql语句工厂

写了一个sql语句工厂,用于生成sql语句。调用类型工厂

写了一个类型工厂,用于获取所需的类型,识别特性等。

appsettings.json是配置文件 

最后一个是使用说明

我实现过程的首先从底层开始。

首先写的是类型工厂

结构

Core1.1环境下,自己实现的一个简单的CRUD框架(反射实现)

BaseTypeHelper.cs 是基础的类型帮助类

TypeHelperFactory.cs是一个工厂,调用BaseTypeHelper.cs,是现自己的功能,同时为sql语句工厂提供服务。

首先介绍一下BaseTypeHelper.cs类。这是代码。为TypeHelperFactory提供了必要的服务

  1  public static class BaseTypeHelper
  2     {
  3         #region 获取单个成员
  4         private static MemberInfo GetOneMember(Type t, string MemberName)
  5         {
  6             return GetAllMembers(t).FirstOrDefault(m => m.Name == MemberName);
  7         }
  8 
  9         #endregion
 10 
 11         #region 获取所有成员
 12         public  static MemberInfo[] GetAllMembers(Type t)
 13         {
 14             return t.GetMembers();
 15         }
 16 
 17         #endregion
 18 
 19         #region 获取成员的属性
 20 
 21         /// <summary>
 22         /// 获取成员的属性
 23         /// </summary>
 24         /// <param name="obj">目标类</param>
 25         /// <param name="MemberName">成员名称</param>
 26         /// <returns></returns>
 27         private static PropertyInfo GetProperty(object obj, string MemberName)
 28         {
 29             var type = obj.GetType(); 
 30             var member = GetOneMember(type, MemberName);
 31             return type.GetProperty(member.Name);
 32 
 33         }
 34         #endregion
 35 
 36         #region 执行法并返回结果    
 37         /// <summary>
 38         /// 获取方法的返回值
 39         /// </summary>
 40         /// <param name="MethodName">方法的名称</param>
 41         /// <param name="instance">实例</param>
 42         /// <param name="param">参数列表,如果没有参数则置为null</param>
 43         /// <returns></returns>
 44         public static object GetMethodValue(string MethodName, object instance, params object[] param)
 45         {
 46             Type t = instance.GetType();
 47             try
 48             {
 49                 MethodInfo info = t.GetMethod(MethodName);
 50                 return info.Invoke(instance, param);
 51             }
 52             catch (Exception e)
 53             {
 54                 Console.WriteLine("方法没有找到," + e);
 55                 throw;
 56             }
 57 
 58         }
 59         #endregion
 60 
 61         #region 获取声明成员的类型
 62 
 63         /// <summary>
 64         /// 获取声明成员的类型
 65         /// 说明:返回若为空则 没有找到
 66         /// 若不为空,则查找正常
 67         /// </summary>
 68         /// <param name="MemberName">成员的名称</param>
 69         /// <param name="t">所在类的类型</param>
 70         /// <returns></returns>
 71         public static string GetPropertyType(string MemberName, Type t)
 72         {
 73             MemberInfo member = GetOneMember(t, MemberName);
 74             if (member != null)
 75             {
 76                 PropertyInfo property = t.GetProperty(member.Name);
 77                 return property.PropertyType.Name;
 78             }
 79             return null;
 80 
 81         }
 82         #endregion
 83 
 84         #region 获取单个成员是否含有某个属性
 85 
 86 
 87         /// <summary>
 88         /// 获取单个成员是否含有某个特性
 89         /// </summary>
 90         /// <param name="MemberName">成员的名称</param>
 91         /// <param name="t">所在类的类型</param>
 92         /// <param name="attribute">要获取的特性</param>
 93         /// <returns></returns>
 94         public static bool CustomAttributeExist(string MemberName, Type t, Attribute attribute)
 95         {
 96 
 97             var Member = GetOneMember(t, MemberName);
 98             var My_customAttribute = Member.CustomAttributes.FirstOrDefault(
 99                               a => a.AttributeType == attribute.GetType());
100             return My_customAttribute != null;
101         }
102         #endregion
103 
104         #region 通过SetValue给成员设值
105   
106         /// <summary>
107         /// 给成员设值
108         /// </summary>
109         /// <param name="obj">目标类</param>
110         /// <param name="MemberName">类内属性名称</param>
111         /// <param name="value">设置的值</param>
112         public static void SetValue(object obj, string MemberName, object value)
113         {
114             var Property = GetProperty(obj, MemberName);
115             Property.SetValue(obj, value);
116         }
117         #endregion
118 
119         #region 通过GetValue给成员取值
120     
121         /// <summary>
122         /// 取成员的值
123         /// </summary>
124         /// <param name="obj">目标类</param>
125         /// <param name="MemberName">成员的名称</param>
126         /// <returns></returns>
127         public static object GetValue(object obj, string MemberName)
128         {
129             var Property = GetProperty(obj, MemberName);
130             return Property.GetValue(obj);
131         }
132         #endregion
133         
134         
135     }
BaseTypeHelper.cs

相关文章:

  • 2021-12-30
  • 2021-11-15
  • 2022-02-12
  • 2022-12-23
  • 2022-12-23
  • 2021-11-26
  • 2021-10-19
  • 2021-07-23
猜你喜欢
  • 2021-08-05
  • 2021-09-24
  • 2022-12-23
  • 2021-10-21
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案