9 Star 21 Fork 4

Tik / SqlRepoEx

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

1、SqlRepoEx是一个轻型的ORM。最大的一个核心库SqlRepoEx.Core.dll仅不到160K,静态库SqlRepoEx.MsSql.Static.dll仅7K。

2、SqlRepoEx解决了Lambda转Sql语句这一难题,我们不再使用字符串来拼接SQL语句,这个一个无聊且易出错的工作;

3、SqlRepoEx不仅实现了完整的Select、Insert、Update、Delete等语句解析器,同时,也实现了Select、where、order by等子句,这些语句与子句均支持导出SQL语句,使得拼接复杂场景SQL语句变得轻松;

4、SqlRepoEx同时提供了IExecuteSqlStatement及其实现类,通过WithSql方法附加你想要的SQL语句,并通过Go()获得想要的结果,就像其他语句解析器中的Go()一样;

5、SqlRepoEx解决了在Sql Server与MySql等常见数据库的方言访问,让我们在Sql Server与MySql之间迁移变得非常轻松,你根本不需要关心使用的是什么数据库,只需要简单两句代码,应用就会如期运行;

6、SqlRepoEx很快。SqlRepoEx原生数据访问与Dapper不相上下,并且,SqlRepoEx能与Dapper最佳融合,可轻易使用Dapper强大功能;

7、SqlRepoEx本身支持Sql Server与MySql方言,同时通过SqlRepoEx.Normal支持非方言SQL,接合其他数据访问库,如Dappers,能访问大多数据库,

8、实际上,SqlRepoEx通过解析Lambda并转换成SQL语句,你可以使用任何能使用SQL的ORM工具来访问你想要的数据。

9,SqlRepoEx支持多常见的种复杂的SQL语法,如Union,Join等,同时,通过简单的join on语句,可以表达更复杂的类型结果

10、SqlRepoEx没侵入性,仅通过简单的几个特性,就能让类与数据库关联起来,没有复杂的XML配置,也不需要josn配置,如果SqlRepoEx用到了配置文件,那就是配置在配置文件中的数据库连接字串,当然,你可以直接在代码中指定,这取决于你使用的是哪个数据提供者。

11、SqlRepoEx是Lambda,所以,对c#程序员来说,是非常简单的,其语法特点与Linq to Sql极为相似,但又不依赖于数据上下文,因而无须迁就数据库的设计。

12、SqlRepoEx 大多数类型均是可重写的,可扩展性强(SqlRepoEx.Adapter.Dapper就是一个简单但强大的扩展)。

NuGet library that you can add in to your project

SqlRepoEx.Adapter.Dapper

SqlRepoEx.MsSql.Static

SqlRepoEx.MsSql.Autofac

SqlRepoEx.MsSql.ServiceCollection

SqlRepoEx.MySql.Static

SqlRepoEx.MySql.ServiceCollection

SqlRepoEx.MySql.Autofac

本项目是在 SqlRepo 之上进行的二次开发

主要解决:

1、解决拼接语句,使用where以外方法时,缺少Where子句时的错误;
2、解决多条件拼接Where;
3、增加操作时,不再受限于实例必需有Id的自增自段

Example

IRepository<ToDo> repository = repositoryFactory.Create<ToDo>();
            var results = repository.Query()
                         .Select(e => e.Id, e => e.Task, e => e.CreatedDate);
 results = results.Where(e => e.IsCompleted == false);
 results = results.Where(e => e.Id == 3);

未改之前


SELECT [dbo].[ToDo].[Id]
, [dbo].[ToDo].[Task]
, [dbo].[ToDo].[CreatedDate]
FROM [dbo].[ToDo]
WHERE ([dbo].[ToDo].[IsCompleted] = 0)
WHERE ([dbo].[ToDo].[Id] = 3);

更改后


SELECT [dbo].[ToDo].[Id]
, [dbo].[ToDo].[Task]
, [dbo].[ToDo].[CreatedDate]
FROM [dbo].[ToDo]
WHERE ([dbo].[ToDo].[IsCompleted] = 0)
And ([dbo].[ToDo].[Id] = 3);

指定非自增字段

var repository = this.repositoryFactory.Create<DoitTest>();
DoitTest doitTest = new DoitTest();

doitTest.TestRmk = "测试";
doitTest.TestBool = true;
doitTest.TestId = 123;
Console.WriteLine(repository.Insert().UsingIdField(d => d.TestId, false).For(doitTest).Sql());

生成的SQL

INSERT [dbo].[DoitTest]([TestId], [TestRmk], [TestBool])
VALUES(123, '测试', 1);

指定非自增字段

var repository = this.repositoryFactory.Create<DoitTest>();
DoitTest doitTest = new DoitTest();

doitTest.TestRmk = "测试";
doitTest.TestBool = true;
doitTest.TestId = 123;
Console.WriteLine(repository.Insert().UsingIdField(d => d.TestId).For(doitTest).Sql());

生成的SQL

INSERT [dbo].[DoitTest]([TestRmk], [TestBool])
VALUES('测试', 1);
SELECT *
FROM [dbo].[DoitTest]
WHERE [TestId] = SCOPE_IDENTITY();

原项目中的例子:


public class GettingStarted
{
    private IRepositoryFactory repositoryFactory;

    public GettingStarted(IRepositoryFactory repositoryFactory)
    {
        this.repositoryFactory = repositoryFactory;
    }

    public void DoIt()
    {
         var repository = this.repositoryFactory.Create<ToDo>();
         var results = repository.Query()
         .Select(e => e.Id, e => e.Task, e => e.CreatedDate)
         .Where(e => e.IsCompleted == false)
         .Go();
    }
}

Generates the following SQL statement and maps the results back to the list of ToDo objects.


SELECT [dbo].[ToDo].[Id], [dbo].[ToDo].[Task], [dbo].[ToDo].[CreatedDate]
FROM [dbo].[ToDo]
WHERE [dbo].[ToDo].[IsCompleted] = 0;

2018-9-25增加分页操作

 var repository = RepoFactory.Create<ToDo>();
            var results = repository.Query()
                                    .Select(e => e.Id, e => e.Task, e => e.CreatedDate)
                                    .OrderBy(e => e.Id)
                                    .Page(10, 3)
                                    .Go();

2018-9-25增加存储OUTPUT参数返回

MIT License Copyright (c) 2018 SqlRepo Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

SqlRepoEx是 .Net平台下兼容.NET Standard 2.0人一个轻型的ORM。解决了Lambda转Sql语句这一难题,SqlRepoEx使用的是Lambda表达式,所以,对c#程序员来说,是非常简单的,其语法特点与Linq to Sql极为相似。不仅实现了完整的Select、Insert、Update、Delete等语句解析器,同时,也实现了Select、where、order by等子句,这些语句与子句均支持导出SQL语句,使得拼接复杂场景SQL语句变得轻松,SqlRepoEx很快其原生数据访问与Dapper不相上下,SqlRepoEx本身支持Sql Server与MySql方言,同时通过SqlRepoEx.Normal支持非方言SQL。SqlRepoEx没侵入性,仅... 展开 收起
C#
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C#
1
https://gitee.com/azthinker/SqlRepoEx.git
git@gitee.com:azthinker/SqlRepoEx.git
azthinker
SqlRepoEx
SqlRepoEx
master

搜索帮助