4 Star 12 Fork 7

code2roc / FastORM

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

在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);

空文件

简介

基于ado.net封装的轻量ORM框架 展开 收起
C#
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C#
1
https://gitee.com/code2roc/FastORM.git
git@gitee.com:code2roc/FastORM.git
code2roc
FastORM
FastORM
rebuild

搜索帮助