C#ORM(反射+泛型)参考范例
使用控制台:
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方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)