详解C#反射(三)– 手写ORM框架
第一步先创建工厂获取数据库连接字符串
public class AppsettingFactory
{
public static string GetString(string key)
{
var builder = new ConfigurationBuilder().AddJsonFile(@"C:\Users\dawei.tu\source\repos\ConsoleApp1\ConsoleApp1\appsetting.json");
var config = builder.Build();
return config[key];
}
}
第二步:反射获取类(orm的实现)(此处实现根据id查询的方法)
public class OracleHelper : IDBHelper
{
public void Query()
{
Console.Write("我被反射调用的!");
}
public static T Find<T>(int id){
string connection = AppsettingFactory.GetString("connection");//获取appsetting.json 连接字符串
Type type = typeof(T); //反射对象,获取类
var proplist = type.GetProperties().Select(p => $"[{p.Name}]");//获取实体里面的每一个字段名字
string props = string.Join(',', proplist); //用逗号分开字段名
string sql = $"select {string.Join(',', type.GetProperties().Select(p => p.Name))} from [{type.Name}] where MST_ID={id}";//组装sql语句
object oResult = Activator.CreateInstance(type);//反射获取对象
using (OracleConnection conn = new OracleConnection(connection))//连接数据库
{
using (OracleCommand command = new OracleCommand(sql, conn))
{
conn.Open();
OracleDataReader reader = command.ExecuteReader();
if (reader.Read())
{
foreach (PropertyInfo prop in type.GetProperties())
{
prop.SetValue(oResult, reader[prop.Name]);
}
}
}
}
return (T)oResult;
}
第三步:控制台直接调用
Entity reultlt = OracleHelper.Find<Entity >(2141);
//idb.Query();