# FastORM **Repository Path**: code2roc/FastORM ## Basic Information - **Project Name**: FastORM - **Description**: 基于ado.net封装的轻量ORM框架 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: rebuild - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 12 - **Forks**: 7 - **Created**: 2018-07-26 - **Last Updated**: 2023-12-05 ## Categories & Tags **Categories**: database-dev **Tags**: None ## README ### 在normal分支原有的基础上进行代码重构,基于原生的ado.net进行改造,不依赖于其他三方插件 **配置文件的一些配置项说明** ``` ``` **实体类创建** ``` public class User:BaseEntity { [Key] public string UserGuid { set; get; } public string Name { set; get; } public int Age { set; get; } public string LoginName { set; get; } public string PassWord { set; get; } public DateTime AddDate { set; get; } } ``` 注:所有实体类都要继承自BaseEntity,都需要标注主键字段[key]的注解 **方法说明** 在程序开始运行时执行DBUtil.Init(),会对所有继承自BaseEntity的实体类进行扫描,进行对象的属性,解析数据,基于Emit的get,set动态方法进行缓存 ,DBUtil和DBRow两个操作类都支持通过TraceSQL属性变量设置来进行SQL语句的跟踪,配置参数配置FastORM_TraceOvertTimeSQL和FastORM_TraceOverTimeLimit后可以对数据库的超时操作进行全面跟踪 增 ``` dbutil.Insert(user); ``` 删 ``` dbutil.Remove(user); ``` 改 ``` dbutil.Save(user); ``` 查 ``` User user = dbutil.FindOne("yanpeng19940119"); ``` 注: 1.查找默认按照主键进行查找 2.对于从数据库查找对象的更新,会基于ProxyAttribute对更改的字段进行记录,不会全字段更新 3.对于新创建的对象(从前台的Json传递的数据序列化成的对象),提供更新指定字段的方法Save(T Entity, string[] SaveColumn) **一些复杂方法的支持说明** 计算表数量方法(用于分页) ``` Count() ``` 批量插入方法 ``` InsertBatch(List EntityList, int BatchSize = 500) ``` 查找列表数据 ``` List FindList(string SQL) ``` 查找分页数据 ``` List FindListPage(string SQL, int PageSize, int PageNum, string OrderBy) ``` 查找联合查询数据 ``` DataTable FindView(string SQL) ``` 执行SQL语句 ``` ExecuteSQL(string SQL) ``` 查询单个对象数据 ``` Object ExecuteScar(string SQL) ``` 注:所有方法都提供了切换数据源的方法重载 **事物相关** 同库事物 ``` string exceptionstr = string.Empty; bool issuccess = dbutil.ExecuteTransition_SDB(delegate() { User user = new User(); user.UserGuid = "ceshi00992"; user.Name = "yanpeng"; user.LoginName = "15195007397"; user.PassWord = "123456"; user.Age = 26; user.AddDate = DateTime.Now; dbutil.Insert(user); dbutil.ExecuteSQL("update User set Age=27"); }, out exceptionstr); Console.WriteLine(issuccess); ``` 分布式事物手动RollBack ``` string exceptionstr = string.Empty; User user = new User(); user.UserGuid = "ceshi00992"; user.Name = "yanpeng"; user.LoginName = "15195007397"; user.PassWord = "123456"; user.Age = 26; user.AddDate = DateTime.Now; User user1 = dbutil.FindOne("yanpeng19940119"); var orginalage = user1.Age; bool issuccess = dbutil.ExecuteTransition_DDB_HandleRollBack(delegate() { dbutil.Insert(user, "Test_ConnectionString"); user1.Age = 44; dbutil.Save(user); throw new Exception("111111"); }, delegate() { dbutil.Remove(user, "Test_ConnectionString"); user1.Age = orginalage; dbutil.Save(user); }, out exceptionstr); Console.WriteLine(issuccess); ``` 分布式事物自动RollBack(只支持简单的insert,update,delete 完善中。。。) ``` string exceptionstr = string.Empty; User user = new User(); user.UserGuid = "ceshi00992"; user.Name = "yanpeng"; user.LoginName = "15195007397"; user.PassWord = "123456"; user.Age = 26; user.AddDate = DateTime.Now; User user1 = dbutil.FindOne("yanpeng19940119"); var orginalage = user1.Age; bool issuccess = dbutil.ExecuteTransition_DDB_AutoRollBack(delegate() { dbutil.Insert(user, "Test_ConnectionString"); user1.Age = 44; dbutil.Save(user1); throw new Exception("111111"); }, out exceptionstr); Console.WriteLine(issuccess); ``` 注:自动分布式事物使用时,一定要执行DocFile下的sql建表脚本,并配置日志表的连接GlobalTransition_ConnectionString **弱引用工具类的一些使用** ``` DBRow row = new DBRow("User", "UserGuid", "6cc5b098-0966-4b21-b93e-bdd25fded3ea"); row.TraceSQL = true; row["Name"] = "122yan"; row["LoginName"] = "heheheh"; row["AddDate"] = DateTime.Now; row.Insert(); row["Age"] = 33; row.Update(); row.Delete(); ``` 弱引用类型同库事物 ``` string exceptionstr = string.Empty; bool issuccess = DBRow.ExecuteTransition_SDB(delegate(DbTransaction Transition) { DBRow row = new DBRow("User", "UserGuid", "6cc5b098-0966-4b21-b93e-bdd25fded3ea"); row["Name"] = "122yan"; row["LoginName"] = "heheheh"; row["AddDate"] = DateTime.Now; row.Transition = Transition; row.Insert(); DBRow row1 = new DBRow("User", "UserGuid", "11223344"); row1.Transition = Transition; row1.Delete(); throw new Exception("1111"); }, out exceptionstr); Console.WriteLine(issuccess); ```