首页 > 编程语言 >C#ORM(反射+泛型)参考范例

C#ORM(反射+泛型)参考范例

时间:2022-11-20 13:46:36浏览次数:44  
标签:string C# dynamic ORM static 泛型 type public Name

使用控制台:

1.数据库字符串

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
    </startup>
  <appSettings>
    <add key="IDBConfig" value="T2.SQLServer;T2.SQLServer.SQLServerHelper"/>
    <add key="UserDbContext" value="Data Source=.;Database=Test;Uid=sa;Pwd=sa" />
  </appSettings>
  <connectionStrings>
    <add name="DbContext" connectionString="Data Source=.;Database=Test;Uid=sa;Pwd=sa" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

2.方法

public class SQLHelper
    {
        private static string dbConnStr = ConfigurationManager.ConnectionStrings["DbContext"].ToString();
        public static T Find<T>(int id)
        {
            Type type = typeof(T);
            object obj = Activator.CreateInstance(type);
            var propNames = type.GetProperties().Select(c => $"{c.Name}");
            string props = string.Join(",", propNames);
            string sql = $"SELECT { props } FROM [{ type.Name }] WHERE ID={id}";
            using (SqlConnection conn = new SqlConnection(dbConnStr))
            {
                SqlCommand sqlCommand = new SqlCommand(sql,conn);
                conn.Open();
                SqlDataReader reader = sqlCommand.ExecuteReader();
                if (reader.Read())
                {
                    foreach (var prop in type.GetProperties())
                    {
                        prop.SetValue(obj,reader[prop.Name]);
                    }
                }
            }
            return (T)obj;
        }
    }

3.使用

var user = SQLHelper.Find<User>(1);

补充:

1)方法(注:调用放入Debug内的dll,但是仅限于.NET Framework,.Net Core好像不支持)

public class SimpleFactory
    {
        private static string config = ConfigurationManager.AppSettings["IDBConfig"];

        public static dynamic CreateInstentce()
        {
            Assembly assembly = Assembly.Load("T2.SQLServer");
            Type type = assembly.GetType("T2.SQLServer.SQLServerHelper");
            dynamic dynamic = Activator.CreateInstance(type);
            return dynamic;
        }
    }

2)使用

dynamic db = SimpleFactory.CreateInstentce();
db.Query();

3)说明

dynamic是动态编译(不至于一开始就让编译器报错),程序执行后采取判断有没有Query方法

 

标签:string,C#,dynamic,ORM,static,泛型,type,public,Name
From: https://www.cnblogs.com/dzw159/p/16908323.html

相关文章

  • Chapter 11 - CarLot (CoreData + ArrayController)
    好了,准备工作都做好了。至于布局,这里就不详解了,按照书上的来就行了。我们正常建立Document的程序,然后把NSDocument改成NSPersistentDocument,如图。   记住添加自动......
  • 报错信息java.lang.OutOfmemoryError: PermGen Space
    问题背景PermGenSpace的全称是PermanentGenerationSpace,是指内存的永久保存区域。这一部分用于存放class和meta的信息,class在加载的时候被放入PermGenSpace区域。它和......
  • 025.MyBatis整合C3P0连接池
    1.pom.xml<dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.4</version>......
  • CKS v1.25 更新说明
    亲爱的同学,您好,我们已更新了CKS最新版本v1.25的资料,其中更新了2道新题,请及时联系工程师老师或者客服,更新资料和模拟环境。 请务必按照如下方式更新环境,否则将......
  • Spring-IoC理解
    新建一个Maven工程  在pom文件中导入需要的依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi......
  • csp-j2022 游记
    第一题随便写了写代码如下#include<bits/stdc++.h>usingnamespacestd;stringsa;longlonga,b,c=1;intmain(){freopen("pow.in","r",stdin);freopen(......
  • [paper]计算机视觉领域的物理对抗攻防综述(Physically Adversarial Attacks and Defen
    计算机视觉领域的物理对抗攻防综述PhysicallyAdversarialAttacksandDefensesinComputerVision:ASurveyhttp://arxiv.org/abs/2211.01671摘要攻击:主要从攻击任......
  • Chapter 11 - CarLot (CoreData + ArrayController) - 准备工作(导出NSPersistentDocum
    在Xamarin.Mac中,没有导出NSPersistentDocument这个类,但是这个类在AppKit库中已经实现了,因为要像书上一样绑定managedObjectContext这个变量,但是NSDocument类中是没有实现的......
  • 前端项目npm打包出错问题-Reached heap limit Allocation failed - JavaScript heap o
    其实就是编译时的内存溢出,因为打包文件过大,刚好超过内存的限制大小造成编译中断。解决方案一通过package.json中的"build"加大内存增加--max_old_space_size参数解决方......
  • css怎么设置字体小于12px
    因为浏览器的限制,网页上的字体最小只能设置12px,因为小于12px就会影响浏览效果但有时候我们需求就是要将字体设置的很小这就需要用到特殊的手段,用transform属性设置用tran......