• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

FastORM: 基于ado.net封装的轻量ORM框架

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

FastORM

开源软件地址:

https://gitee.com/code2roc/FastORM

开源软件介绍:

在normal分支原有的基础上进行代码重构,基于原生的ado.net进行改造,不依赖于其他三方插件

配置文件的一些配置项说明

 <connectionStrings>    <!--默认框架数据库连接-->    <add name="Base_ConnectionString" connectionString="Database=test;Server=localhost;User ID=root;Password=;charset=utf8;Allow User Variables=True;" providerName="MySql.Data.MySqlClient" />    <!--全局事物库数据库连接,使用跨库事物,此连接必须配置-->    <add name="GlobalTransition_ConnectionString" connectionString="Database=test;Server=localhost;User ID=root;Password=;charset=utf8;Allow User Variables=True;" providerName="MySql.Data.MySqlClient" />    <!--其他库数据库连接-->    <add name="Test_ConnectionString" connectionString="Database=test2;Server=localhost;User ID=root;Password=;charset=utf8;Allow User Variables=True;" providerName="MySql.Data.MySqlClient" />  </connectionStrings>  <appSettings>    <!--是否开启全局SQL追踪,1:开启,0:关闭 配合超时时间使用-->    <add key="FastORM_TraceOvertTimeSQL" value="0"/>    <!--追踪超过设置时间时限的SQL(毫秒)语句-->    <add key="FastORM_TraceOverTimeLimit" value="2000"/>  </appSettings>

实体类创建

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<User>("yanpeng19940119");

注:

1.查找默认按照主键进行查找

2.对于从数据库查找对象的更新,会基于ProxyAttribute对更改的字段进行记录,不会全字段更新

3.对于新创建的对象(从前台的Json传递的数据序列化成的对象),提供更新指定字段的方法Save(T Entity, string[] SaveColumn)

一些复杂方法的支持说明
计算表数量方法(用于分页)

 Count<T>()

批量插入方法

InsertBatch<T>(List<T> EntityList, int BatchSize = 500)

查找列表数据

List<T> FindList<T>(string SQL)

查找分页数据

 List<T> FindListPage<T>(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<User>("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<User>("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);

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap