详解C#反射(三)– 手写ORM框架

详解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();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小盆友你是否很有多问号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值