C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了借助表达式树感受不一样的CRUD大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

借助表达式树感受不一样的CRUD

Intro

最近有个想法,想不写 sql 语句,做一个类似于 ORM 的东西,自己解析表达式树,生成要执行的 sql 语句,最后再执行 sql 语句,返回相应结果。

思路解析

常用的 sql 语句基本都有一定的模式,就是 INSERT/deletE/update/SELECT,我把公用的部分给抽离出来,把查询/更新/删除条件和指定字段通过表达式树来指出,解析传入的表达式树对象来获取条件以及要更新的字段。

源码

源码链接

Sample

请看使用示例

安装 nuget 包 WihanLi.Common

public static class RepositoryTest
    {
        public static void Maintest()
        {
            var connectionPool = new DbConnectionPool(new DbConnectionPoolPolicy(ConfigurationHelper.ConnectionString("TestDb")));

            var repo = new Repository<TestEntity>(() => connectionPool.Get());
            repo.Insert(new TestEntity
            {
                Token = "1233",CreatedTime = datetiR_112_11845@e.UtcNow
            });

            var entity = repo.Fetch(t => t.PKID == 1);
            System.Console.WriteLine(entity.Token);

            repo.update(t => t.PKID == 1,t => t.Token,1);

            entity = repo.Fetch(t => t.PKID == 1);
            System.Console.WriteLine(entity.Token);

            repo.delete(t => t.PKID == 1);
            entity = repo.Fetch(t => t.PKID == 1);
            System.Console.WriteLine($"delete operation {(entity == null ? "success" : "Failed")}");

            repo.Execute("TRUNCATE TABLE dbo.tabTestEntity");

            Console.WriteLine("finished.");
        }

        public class DbConnectionPool : DefaultObjectPool<DbConnection>
        {
            public DbConnectionPool(IPooledObjectPolicy<DbConnection> policy) : base(policy)
            {
            }

            public DbConnectionPool(IPooledObjectPolicy<DbConnection> policy,int maximumRetained) : base(policy,maximumRetained)
            {
            }
        }

        public class DbConnectionPoolPolicy : IPooledObjectPolicy<DbConnection>
        {
            private readonly String _connString;

            public DbConnectionPoolPolicy(String connString)
            {
                _connString = connString;
            }

            public DbConnection Create()
            {
                return new sqlConnection(_connString);
            }

            public bool Return(DbConnection obj)
            {
                return obj.ConnectionString.IsnotNullOrWhiteSpace();
            }
        }
        [Table("tabTestEntity")]
        internal class TestEntity
        {
            [DatabaseGenerated(DatabaseGeneratedoption.Identity)]
            public int PKID { get; set; }

            public String Token { get; set; }

            public datetiR_112_11845@e CreatedTime { get; set; }
        }
    }

示例使用了 ObjectPool 实现了一个数据库连接池,Repository 实例化需要一个获取 DbConnection 对象的委托,而数据库连接就是从这数据库连接池中获取

不足/TODO

大佬总结

以上是大佬教程为你收集整理的借助表达式树感受不一样的CRUD全部内容,希望文章能够帮你解决借助表达式树感受不一样的CRUD所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: