Full Code of overtly/core-data for AI

master 51cd7e43c9d1 cached
125 files
508.3 KB
122.0k tokens
659 symbols
1 requests
Download .txt
Showing preview only (563K chars total). Download the full file or copy to clipboard to get everything.
Repository: overtly/core-data
Branch: master
Commit: 51cd7e43c9d1
Files: 125
Total size: 508.3 KB

Directory structure:
gitextract_jy2ln_jg/

├── .gitattributes
├── .gitignore
├── README.md
├── core-data.sln
└── src/
    ├── .vs/
    │   ├── Sodao.Core/
    │   │   └── v15/
    │   │       └── Server/
    │   │           └── sqlite3/
    │   │               └── storage.ide
    │   └── config/
    │       └── applicationhost.config
    ├── Overt.Core.Data/
    │   ├── Attribute/
    │   │   └── SubmeterAttribute.cs
    │   ├── Constants.cs
    │   ├── Contract/
    │   │   ├── IBaseRepository.cs
    │   │   └── IPropertyAssist.cs
    │   ├── DataContext/
    │   │   ├── DataContext.cs
    │   │   └── DataSettings.cs
    │   ├── Enums/
    │   │   ├── DataCustomType.cs
    │   │   ├── DatabaseType.cs
    │   │   └── FieldSortType.cs
    │   ├── Expressions/
    │   │   ├── ExpressionHelper.cs
    │   │   ├── Extensions/
    │   │   │   └── Expression.Extensions.cs
    │   │   └── SqlExpression/
    │   │       ├── Resolve/
    │   │       │   ├── Basic/
    │   │       │   │   ├── BaseSqlExpression.cs
    │   │       │   │   └── ISqlExpression.cs
    │   │       │   ├── BinarySqlExpression.cs
    │   │       │   ├── ConstantSqlExpression.cs
    │   │       │   ├── LambdaSqlExpression.cs
    │   │       │   ├── ListInitSqlExpression.cs
    │   │       │   ├── MemberSqlExpression.cs
    │   │       │   ├── MethodCallSqlExpression.cs
    │   │       │   ├── NewArraySqlExpression.cs
    │   │       │   ├── NewSqlExpression.cs
    │   │       │   └── UnarySqlExpression.cs
    │   │       ├── SqlExpression.cs
    │   │       ├── SqlExpressionCompiler.cs
    │   │       ├── SqlExpressionCore.cs
    │   │       ├── SqlExpressionFingerprint.cs
    │   │       ├── SqlExpressionProvider.cs
    │   │       └── SqlGenerate.cs
    │   ├── Extensions/
    │   │   ├── Dapper.Async.Extensions.cs
    │   │   ├── Dapper.Extensions.cs
    │   │   ├── EntityDefinition.Extensions.cs
    │   │   ├── Expression.Extensions.cs
    │   │   ├── SqlAlias.Extensions.cs
    │   │   └── Table.Extensions.cs
    │   ├── Overt.Core.Data.csproj
    │   ├── Overt.Core.Data.xml
    │   ├── Params/
    │   │   └── OrderByField.cs
    │   └── Repository/
    │       ├── BaseRepository.cs
    │       └── PropertyAssist.cs
    ├── core/
    │   ├── Overt.Core.DataConsole/
    │   │   ├── Overt.Core.DataConsole.csproj
    │   │   ├── Program.cs
    │   │   └── appsettings.json
    │   ├── Overt.Core.Test/
    │   │   ├── ApplicationTest.cs
    │   │   ├── BaseTest.cs
    │   │   ├── Overt.Core.Test.csproj
    │   │   └── appsettings.json
    │   ├── Overt.User.Application/
    │   │   ├── AutoMapperProfiles.cs
    │   │   ├── Constracts/
    │   │   │   ├── ISubDbUser2Service.cs
    │   │   │   ├── ISubDbUserService.cs
    │   │   │   ├── ISubUserService.cs
    │   │   │   ├── IUserLongIdService.cs
    │   │   │   └── IUserService.cs
    │   │   ├── Extensions/
    │   │   │   └── ModelValidationExtensions.cs
    │   │   ├── Models/
    │   │   │   ├── UserModel.cs
    │   │   │   ├── UserPostModel.cs
    │   │   │   └── UserSearchModel.cs
    │   │   ├── Overt.User.Application.csproj
    │   │   ├── ServiceCollectionExtensions.cs
    │   │   └── Services/
    │   │       ├── SubDbUser2Service.cs
    │   │       ├── SubDbUserService.cs
    │   │       ├── SubUserService.cs
    │   │       ├── UserLongIdService.cs
    │   │       └── UserService.cs
    │   └── Overt.User.Domain/
    │       ├── Contracts/
    │       │   ├── ISubDbUser2Repository.cs
    │       │   ├── ISubDbUserRepository.cs
    │       │   ├── ISubUserRepository.cs
    │       │   ├── IUserLongIdRepository.cs
    │       │   └── IUserRepository.cs
    │       ├── Entities/
    │       │   ├── SubDbUser2Entity.cs
    │       │   ├── SubDbUserEntity.cs
    │       │   ├── SubUserEntity.cs
    │       │   ├── UserEntity.cs
    │       │   └── UserLongIdEntity.cs
    │       ├── Overt.User.Domain.csproj
    │       ├── Repositories/
    │       │   ├── SubDbUser2Repository.cs
    │       │   ├── SubDbUserRepository.cs
    │       │   ├── SubUserRepository.cs
    │       │   ├── UserLongIdRepository.cs
    │       │   └── UserRepository.cs
    │       └── ServiceCollectionExtensions.cs
    └── net46/
        ├── Overt.Core.DataConsole/
        │   ├── App.config
        │   ├── AutofacContainer.cs
        │   ├── Overt.Core.DataConsole.csproj
        │   ├── Program.cs
        │   ├── Properties/
        │   │   └── AssemblyInfo.cs
        │   └── packages.config
        ├── Overt.User.Application/
        │   ├── AutoMapperProfiles.cs
        │   ├── AutofacExtensions.cs
        │   ├── Constracts/
        │   │   ├── ISubDbUser2Service.cs
        │   │   ├── ISubDbUserService.cs
        │   │   ├── ISubUserService.cs
        │   │   └── IUserService.cs
        │   ├── Extensions/
        │   │   └── ModelValidationExtensions.cs
        │   ├── Models/
        │   │   ├── UserModel.cs
        │   │   ├── UserPostModel.cs
        │   │   └── UserSearchModel.cs
        │   ├── Overt.User.Application.csproj
        │   ├── Properties/
        │   │   └── AssemblyInfo.cs
        │   ├── Services/
        │   │   ├── SubDbUser2Service.cs
        │   │   ├── SubDbUserService.cs
        │   │   ├── SubUserService.cs
        │   │   └── UserService.cs
        │   └── packages.config
        └── Overt.User.Domain/
            ├── AutofacExtensions.cs
            ├── Contracts/
            │   ├── ISubDbUser2Repository.cs
            │   ├── ISubDbUserRepository.cs
            │   ├── ISubUserRepository.cs
            │   └── IUserRepository.cs
            ├── Entities/
            │   ├── SubDbUser2Entity.cs
            │   ├── SubDbUserEntity.cs
            │   ├── SubUserEntity.cs
            │   └── UserEntity.cs
            ├── Overt.User.Domain.csproj
            ├── Properties/
            │   └── AssemblyInfo.cs
            ├── Repositories/
            │   ├── SubDbUser2Repository.cs
            │   ├── SubDbUserRepository.cs
            │   ├── SubUserRepository.cs
            │   └── UserRepository.cs
            └── packages.config

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================


================================================
FILE: .gitignore
================================================
#
#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.obj
*.exe
*.pdb
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.sbr
obj/

[Rr]elease*/
_ReSharper*/
[Tt]est[Rr]esult*
packages

 
log.txt
/.vs
/src/core/Overt.Core.DataConsole/appsettings.txt
/src/net46/Overt.Core.DataConsole/App.txt


================================================
FILE: README.md
================================================
如有疑问可直接加QQ:2292709323,微信:yaofengv,联系

# Overt.Core.Data

### 项目层次说明

> Overt.Core.Data v2.2.3 
> 基于dapper封装的expression om,让CURD更简单

#### 1. 项目目录

```
|-Attrubute                     特性
|  |-SubmeterAttrubute.cs       分表标识特性 (已废弃)
|
|-Contract                      契约层
|  |-IPropertyAssist.cs         统一的接口定义文件,所有的数据层接口均继承
|  |-IBaseRepository<T>.cs      基础接口类,包含增删改查,以及继承IDbRepository
|
|-DataContext                   数据库连接层
|  |-DataContext.cs             数据库连接工厂类
|  |-DataContextConfig.cs       数据库配置信息获取类
|
|-Enums                         枚举
|  |-DatabaseType.cs            数据库类型
|  |-FieldSortType.cs           Asc / Desc
|
|-Expressions                   表达式解析器(略)
|
|-Extensions                    Dapper扩展
|  |-Dapper.Extension.cs        扩展类
|
|-Params                        参数实体
|  |-OrderByField.cs            排序类
|
|-Repositry                     契约实现层
|  |-PropertyAssist.cs          抽象类,继承IPropertyAssist,virtual 
|  |-BaseRepository<T>.cs       抽象类,实现 IBaseRepository<T>,virtual
```


#### 2. 版本及支持

> * Nuget版本:V2.2.3
> * 框架支持: Framework4.6.1 - NetStandard 2.0
> * 数据库支持:MySql / SqlServer / SQLite [使用详见下文]


#### 3. 项目依赖

> * Framework 4.6.1

```
Dapper 2.0.35  
MySql.Data 8.0.20
System.Data.SqlClient 4.8.1
System.Data.SQLite 1.0.113.1
System.ComponentModel.DataAnnotations 4.7.0
```

> * NetStandard 2.0

```
Dapper 2.0.35  
Microsoft.Data.Sqlite 3.1.5
MySql.Data 8.0.20
System.Data.SqlClient 4.8.1
System.ComponentModel.DataAnnotations 4.7.0
Microsoft.Extensions.Configuration 2.0.0

```


### 使用

#### 1. 配置信息

> * 支持 IConfiguration 对象注入
> * 支持默认配置文件appsettings.json
> * 支持环境变量,或者使用外部的第三方配置中心(appolo),最终还是依赖于微软自身Configuration
> * Core(DbType=MySql|SqlServer|SQLite): 

```
[mysql]: DataSource=127.0.0.1;Database=TestDb;uid=root;pwd=123456;Allow Zero Datetime=True;DbType=MySql
[sqlserver]: Data Source=127.0.0.1;Initial Catalog=TestDb;Persist Security Info=True;User ID=sa;Password=123456;DbType=SqlServer  
[sqlite]: Data Source=testdb.db;DbType=SQLite; // 默认使用App_Data目录
```

> * Framework: 正常的连接字符串,使用ProviderName来区分数据库类型


#### 2. Nuget包引用

```
Install-Package Overt.Core.Data -Version 2.2.3
```


#### 3. 约定

> * 服务层契约需继承IBaseRepository<>
> * 服务层契约实现实现自定义契约,并继承BaseRepository<T>
> * 外部执行Sql使用 BaseRepository 中 Execute 方法 内部管理连接

```
return await Execute(async (connection) =>
{
    // 执行方法
}, true);
```

#### 4. 分表实现

```
IBaseRepository的实现

// 自定义重写TableNameFunc
// 使用GetTableName()可获取到实际的表名
// 内置方法均从上述方法中获取表名,默认表名为实体定义的[Table("主表名")]
public override Func<string> TableNameFunc => () =>
{
    var tableName = $"{GetMainTableName()}_{DateTime.Now.ToString("yyyyMMdd")}";
    return tableName;
};
        
// 重写创建表的脚本,可在调用过程中,自动创建表,一般用于动态分表
public override Func<string, string> CreateScriptFunc => (tableName) =>
{
    return "创建表的Sql脚本"; // 将在增删改操作中执行,查询操作中,表不存在则直接返回空数据  
}        
```

#### 5. 分库实现

> * 连接字符串配置中以key - value 模式定义,key使用默认的读写分离关键字【master / secondary】表示写入连接字符串和读取连接字符串
> * 前缀添加 xxx.即可简单定义不同数据库,代码中,对于IBaseRepository的实现,在构造函数中直接常量定义 xxx,如下所示
```
using Overt.Core.Data;
using Overt.User.Domain.Contracts;
using Overt.User.Domain.Entities;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Dapper;
using System.Linq;
using Microsoft.Extensions.Configuration;

namespace Overt.User.Domain.Repositories
{
    public class UserRepository : BaseRepository<UserEntity>, IUserRepository
    {
        public UserRepository(IConfiguration configuration) 
            : base(configuration, "xxx") // dbStoreKey 可用于不同数据库切换,连接字符串key前缀:xxx.master xxx.secondary
        {
        }
    }
}

```


#### 6. 事务实现

> * Framework: 使用TransactionScope
> * DotNetCore: 使用TransactionScope

```
// Service层
public async Task<bool> ExecuteInTransactionAsync()
{
    // 分布式事务
    // 异步中需要增加该参数:TransactionScopeAsyncFlowOption.Enabled
    using (var scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
    {
        var result = false;
        try
        {
            result = await _userRepository.AddAsync(new UserEntity());
            result &= await _subUserRepository.AddAsync(new SubUserEntity());

            scope.Complete();
            return result;
        }
        catch
        {
            // logger
        }
        return false;
    }
}
```

#### 7. Lambda表达式支持

> * ==
> * !
> * !=
> * null
> * In
> * Equals
> * Contains
> * !Contains
> * StartWith
> * EndWith
> * &&
> * ||
> * &
> * |


##### 不支持案例
~~var list = _repository.GetList(1, 1, oo=>"test".Contains(oo.UserName));~~  
~~var list = _repository.GetList(1, 1, oo=>oo.UserName.IndexOf("abc") > -1);~~


#### 8. 案例使用

* 添加记录
```
// 单条记录插入
_repository.Add(obj);

// 多条记录批量插入,建议不要超过500条
_repository.Add(obj0, obj1, ...);
```

* 修改记录
```
// 修改整份数据
_repository.Set(obj);

// 修改部分字段(基于字典对象)
var setDic = new Dictionary<string, object>()
{
    { "UserName", "1" }
};
_repository.Set(() => setDic, oo => oo.UserId == 1);

// 修改部分字段(基于匿名对象)
var setObj = new 
{
    UserName = "1"
};
_repository.Set(() => setObj, oo => oo.UserId == 1);

// 修改值类型字段进行增减,比如数量的增减,年龄的增减等
_repository.Incr("Age", 1, oo => oo.UserId == 1);
```

* 删除记录
```
_repository.Delete(oo => oo.UserId == 1);
```

* 单记录查询
```
var entity = _repository.Get(oo => oo.UserId == 1);
```

* 列表记录查询
```
var ary = new string[]{ "1", "2" };
var list = _repository.GetList(1, 1, oo=>ary.Contains(oo.UserId));

var ary = new List<string>(){ "1", "2" };
var list = _repository.GetList(1, 1, oo=>ary.Contains(oo.UserId));

var key = "abc";
var list = _repository.GetList(1, 1, oo=>oo.UserName.Contains(key));

var list = _repository.GetList(1, 1, oo=>oo.UserName.Equals(key));

var list = _repository.GetList(1, 1, oo=>oo.UserName.Contains("abc"));

var list = _repository.GetList(1, 1, oo=>oo.UserName.StartWith("abc"));

var list = _repository.GetList(1, 1, oo=>oo.UserName.EndWith("abc"));

var list = _repository.GetList(1, 1, oo=>ary.Contains(oo.UserId) && !IsSex);

var list = _repository.GetList(1, 1, oo=>oo.UserName != null);

var list = _repository.GetList(1, 1, oo=>oo.UserName == null);
```


#### 9. 更新说明

- 2023-02-23 v2.2.3

> 1. Insert 支持long自增



- 2022-11-22 v2.2.2

> 1. GetMainTableName开放使用



- 2022-09-29 v2.2.1

> 1. 增加支持& |



- 2021-12-29 v2.2.0

> 1. 支持PG数据库 感谢 @liuzhenbao0505
> 2. 修正 StartWith EndWith 的拼接错误 @Zhang-Pengyuan



- 2021-03-26 v2.1.4

> 1. 将基础方法Execute变更为virtual,可允许重写



- 2021-02-24 v2.1.3

> 1. 基础方法增加根据某个字段增减数据的方法:IncrAsync(string field, TValue value, Expression<Func<TEntity, bool>> whereExpress)



- 2021-01-14 v2.0.1

> 1. 修复多数据库情况下并发查询切换数据库导致连接字符串混乱的问题
> 2. Repository层回执SQL脚本的位置调整,防止数据库执行异常无法获知实际的SQL脚本



- 2020-06-30 v2.0.0

> 1. 升级底层依赖的驱动:Dapper、SqlClient、MySql、SQLite
> 2. 去除原有老版本中使用的Transaction属性,全部统一使用TransactionScope实现事务业务。PS:DotNetCore中的事务只支持单服务器数据,Framework支持分布式数据库!!!
> 3. 如需兼容老版本的的代码,请使用v1.x.x版本的驱动或者代码


---


================================================
FILE: core-data.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2027
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Overt.Core.Data", "src\Overt.Core.Data\Overt.Core.Data.csproj", "{8B1B556F-1D2C-49D2-8CB9-F9D2C7080786}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "core", "core", "{9DD521BB-DEE6-40A1-B042-EA89EB889546}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "net462", "net462", "{B159908C-321A-45AF-998B-C431D7D02070}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Overt.User.Domain", "src\net46\Overt.User.Domain\Overt.User.Domain.csproj", "{F34F6B13-B939-47A3-827E-E7015FD1B434}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Overt.Core.DataConsole", "src\core\Overt.Core.DataConsole\Overt.Core.DataConsole.csproj", "{D2349F1D-B2AB-40EE-980F-0F0AB8E3F970}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Overt.User.Application", "src\core\Overt.User.Application\Overt.User.Application.csproj", "{5D9B9D31-33CA-4378-AA58-D788C7EBD4CF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Overt.User.Domain", "src\core\Overt.User.Domain\Overt.User.Domain.csproj", "{0558E8F8-BB9E-4C62-A8D0-03011ED77284}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Overt.User.Application", "src\net46\Overt.User.Application\Overt.User.Application.csproj", "{5ADB2A33-42E4-484B-997E-3F8B942539E4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Overt.Core.DataConsole", "src\net46\Overt.Core.DataConsole\Overt.Core.DataConsole.csproj", "{F92F116B-A438-447B-9475-4D62AF197742}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Release|Any CPU = Release|Any CPU
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{8B1B556F-1D2C-49D2-8CB9-F9D2C7080786}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{8B1B556F-1D2C-49D2-8CB9-F9D2C7080786}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{8B1B556F-1D2C-49D2-8CB9-F9D2C7080786}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{8B1B556F-1D2C-49D2-8CB9-F9D2C7080786}.Release|Any CPU.Build.0 = Release|Any CPU
		{F34F6B13-B939-47A3-827E-E7015FD1B434}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{F34F6B13-B939-47A3-827E-E7015FD1B434}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{F34F6B13-B939-47A3-827E-E7015FD1B434}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{F34F6B13-B939-47A3-827E-E7015FD1B434}.Release|Any CPU.Build.0 = Release|Any CPU
		{D2349F1D-B2AB-40EE-980F-0F0AB8E3F970}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{D2349F1D-B2AB-40EE-980F-0F0AB8E3F970}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{D2349F1D-B2AB-40EE-980F-0F0AB8E3F970}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{D2349F1D-B2AB-40EE-980F-0F0AB8E3F970}.Release|Any CPU.Build.0 = Release|Any CPU
		{5D9B9D31-33CA-4378-AA58-D788C7EBD4CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{5D9B9D31-33CA-4378-AA58-D788C7EBD4CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{5D9B9D31-33CA-4378-AA58-D788C7EBD4CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{5D9B9D31-33CA-4378-AA58-D788C7EBD4CF}.Release|Any CPU.Build.0 = Release|Any CPU
		{0558E8F8-BB9E-4C62-A8D0-03011ED77284}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{0558E8F8-BB9E-4C62-A8D0-03011ED77284}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{0558E8F8-BB9E-4C62-A8D0-03011ED77284}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{0558E8F8-BB9E-4C62-A8D0-03011ED77284}.Release|Any CPU.Build.0 = Release|Any CPU
		{5ADB2A33-42E4-484B-997E-3F8B942539E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{5ADB2A33-42E4-484B-997E-3F8B942539E4}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{5ADB2A33-42E4-484B-997E-3F8B942539E4}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{5ADB2A33-42E4-484B-997E-3F8B942539E4}.Release|Any CPU.Build.0 = Release|Any CPU
		{F92F116B-A438-447B-9475-4D62AF197742}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{F92F116B-A438-447B-9475-4D62AF197742}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{F92F116B-A438-447B-9475-4D62AF197742}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{F92F116B-A438-447B-9475-4D62AF197742}.Release|Any CPU.Build.0 = Release|Any CPU
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(NestedProjects) = preSolution
		{F34F6B13-B939-47A3-827E-E7015FD1B434} = {B159908C-321A-45AF-998B-C431D7D02070}
		{D2349F1D-B2AB-40EE-980F-0F0AB8E3F970} = {9DD521BB-DEE6-40A1-B042-EA89EB889546}
		{5D9B9D31-33CA-4378-AA58-D788C7EBD4CF} = {9DD521BB-DEE6-40A1-B042-EA89EB889546}
		{0558E8F8-BB9E-4C62-A8D0-03011ED77284} = {9DD521BB-DEE6-40A1-B042-EA89EB889546}
		{5ADB2A33-42E4-484B-997E-3F8B942539E4} = {B159908C-321A-45AF-998B-C431D7D02070}
		{F92F116B-A438-447B-9475-4D62AF197742} = {B159908C-321A-45AF-998B-C431D7D02070}
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {63C9732F-DFAB-438C-B2F2-7C0399EF8701}
	EndGlobalSection
EndGlobal


================================================
FILE: src/.vs/config/applicationhost.config
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!--

    IIS configuration sections.

    For schema documentation, see
    %IIS_BIN%\config\schema\IIS_schema.xml.
    
    Please make a backup of this file before making any changes to it.

    NOTE: The following environment variables are available to be used
          within this file and are understood by the IIS Express.

          %IIS_USER_HOME% - The IIS Express home directory for the user
          %IIS_SITES_HOME% - The default home directory for sites
          %IIS_BIN% - The location of the IIS Express binaries
          %SYSTEMDRIVE% - The drive letter of %IIS_BIN%

-->
<configuration>
  <!--

        The <configSections> section controls the registration of sections.
        Section is the basic unit of deployment, locking, searching and
        containment for configuration settings.
        
        Every section belongs to one section group.
        A section group is a container of logically-related sections.
        
        Sections cannot be nested.
        Section groups may be nested.
        
        <section
            name=""  [Required, Collection Key] [XML name of the section]
            allowDefinition="Everywhere" [MachineOnly|MachineToApplication|AppHostOnly|Everywhere] [Level where it can be set]
            overrideModeDefault="Allow"  [Allow|Deny] [Default delegation mode]
            allowLocation="true"  [true|false] [Allowed in location tags]
        />
        
        The recommended way to unlock sections is by using a location tag:
        <location path="Default Web Site" overrideMode="Allow">
            <system.webServer>
                <asp />
            </system.webServer>
        </location>

    -->
  <configSections>
    <sectionGroup name="system.applicationHost">
      <section name="applicationPools" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
      <section name="configHistory" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
      <section name="customMetadata" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
      <section name="listenerAdapters" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
      <section name="log" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
      <section name="serviceAutoStartProviders" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
      <section name="sites" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
      <section name="webLimits" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
    </sectionGroup>
    <sectionGroup name="system.webServer">
      <section name="asp" overrideModeDefault="Deny" />
      <section name="caching" overrideModeDefault="Allow" />
      <section name="cgi" overrideModeDefault="Deny" />
      <section name="defaultDocument" overrideModeDefault="Allow" />
      <section name="directoryBrowse" overrideModeDefault="Allow" />
      <section name="fastCgi" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
      <section name="globalModules" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
      <section name="handlers" overrideModeDefault="Deny" />
      <section name="httpCompression" overrideModeDefault="Allow" />
      <section name="httpErrors" overrideModeDefault="Allow" />
      <section name="httpLogging" overrideModeDefault="Deny" />
      <section name="httpProtocol" overrideModeDefault="Allow" />
      <section name="httpRedirect" overrideModeDefault="Allow" />
      <section name="httpTracing" overrideModeDefault="Deny" />
      <section name="isapiFilters" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
      <section name="modules" allowDefinition="MachineToApplication" overrideModeDefault="Deny" />
      <section name="applicationInitialization" allowDefinition="MachineToApplication" overrideModeDefault="Allow" />
      <section name="odbcLogging" overrideModeDefault="Deny" />
      <sectionGroup name="security">
        <section name="access" overrideModeDefault="Deny" />
        <section name="applicationDependencies" overrideModeDefault="Deny" />
        <sectionGroup name="authentication">
          <section name="anonymousAuthentication" overrideModeDefault="Deny" />
          <section name="basicAuthentication" overrideModeDefault="Deny" />
          <section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
          <section name="digestAuthentication" overrideModeDefault="Deny" />
          <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
          <section name="windowsAuthentication" overrideModeDefault="Deny" />
        </sectionGroup>
        <section name="authorization" overrideModeDefault="Allow" />
        <section name="ipSecurity" overrideModeDefault="Deny" />
        <section name="dynamicIpSecurity" overrideModeDefault="Deny" />
        <section name="isapiCgiRestriction" allowDefinition="AppHostOnly" overrideModeDefault="Deny" />
        <section name="requestFiltering" overrideModeDefault="Allow" />
      </sectionGroup>
      <section name="serverRuntime" overrideModeDefault="Deny" />
      <section name="serverSideInclude" overrideModeDefault="Deny" />
      <section name="staticContent" overrideModeDefault="Allow" />
      <sectionGroup name="tracing">
        <section name="traceFailedRequests" overrideModeDefault="Allow" />
        <section name="traceProviderDefinitions" overrideModeDefault="Deny" />
      </sectionGroup>
      <section name="urlCompression" overrideModeDefault="Allow" />
      <section name="validation" overrideModeDefault="Allow" />
      <sectionGroup name="webdav">
        <section name="globalSettings" overrideModeDefault="Deny" />
        <section name="authoring" overrideModeDefault="Deny" />
        <section name="authoringRules" overrideModeDefault="Deny" />
      </sectionGroup>
      <sectionGroup name="rewrite">
        <section name="allowedServerVariables" overrideModeDefault="Deny" />
        <section name="rules" overrideModeDefault="Allow" />
        <section name="outboundRules" overrideModeDefault="Allow" />
        <section name="globalRules" overrideModeDefault="Deny" allowDefinition="AppHostOnly" />
        <section name="providers" overrideModeDefault="Allow" />
        <section name="rewriteMaps" overrideModeDefault="Allow" />
      </sectionGroup>
      <section name="webSocket" overrideModeDefault="Deny" />
      <section name="aspNetCore" overrideModeDefault="Allow" />
    </sectionGroup>
  </configSections>
  <configProtectedData>
    <providers>
      <add name="IISWASOnlyRsaProvider" type="" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useMachineContainer="true" useOAEP="false" />
      <add name="AesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisConfigurationKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAAKmFQvWHDEETRz8l2bjZlRxIkwcqTFaCUnCLljn3Q1OkesrhEO9YyLyx4bUhsj1/DyShAv7OAFFhXlrlomaornnk5PLeyO4lIXxaiT33yOFUUgxDx4GSaygkqghVV0tO5yQ/XguUBp2juMfZyztnsNa4pLcz7ZNZQ6p4yn9hxwNs=" />
      <add name="IISWASOnlyAesProvider" type="Microsoft.ApplicationHost.AesProtectedConfigurationProvider" description="Uses an AES session key to encrypt and decrypt" keyContainerName="iisWasKey" cspProviderName="" useOAEP="false" useMachineContainer="true" sessionKey="AQIAAA5mAAAApAAA4WoiRJ8KHwzAG8AgejPxEOO4/2Vhkolbwo/8gZeNdUDSD36m55hWv4uC9tr/MlKdnwRLL0NhT50Gccyftqz5xTZ0dg5FtvQhTw/he1NwexTKbV+I4Zrd+sZUqHZTsr7JiEr6OHGXL70qoISW5G2m9U8wKT3caPiDPNj2aAaYPLo=" />
    </providers>
  </configProtectedData>
  <system.applicationHost>
    <applicationPools>
      <add name="Clr4IntegratedAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
      <add name="Clr4ClassicAppPool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
      <add name="Clr2IntegratedAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Integrated" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
      <add name="Clr2ClassicAppPool" managedRuntimeVersion="v2.0" managedPipelineMode="Classic" CLRConfigFile="%IIS_USER_HOME%\config\aspnet.config" autoStart="true" />
      <add name="UnmanagedClassicAppPool" managedRuntimeVersion="" managedPipelineMode="Classic" autoStart="true" />
      <applicationPoolDefaults managedRuntimeLoader="v4.0">
        <processModel />
      </applicationPoolDefaults>
    </applicationPools>
    <!--

          The <listenerAdapters> section defines the protocols with which the
          Windows Process Activation Service (WAS) binds.

        -->
    <listenerAdapters>
      <add name="http" />
    </listenerAdapters>
    <sites>
      <site name="WebSite1" id="1" serverAutoStart="true">
        <application path="/">
          <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
        </application>
        <bindings>
          <binding protocol="http" bindingInformation=":8080:localhost" />
        </bindings>
      </site>
      <site name="Sodao.Core.Web" id="2">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
          <virtualDirectory path="/" physicalPath="E:\Sodao\DotNetCore\example\src\Sodao.Core\Sodao.Core.Web" />
        </application>
        <bindings>
          <binding protocol="http" bindingInformation="*:44435:localhost" />
        </bindings>
      </site>
      <siteDefaults>
        <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
        <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
      </siteDefaults>
      <applicationDefaults applicationPool="Clr4IntegratedAppPool" />
      <virtualDirectoryDefaults allowSubDirConfig="true" />
    </sites>
    <webLimits />
  </system.applicationHost>
  <system.webServer>
    <serverRuntime />
    <asp scriptErrorSentToBrowser="true">
      <cache diskTemplateCacheDirectory="%TEMP%\iisexpress\ASP Compiled Templates" />
      <limits />
    </asp>
    <caching enabled="true" enableKernelCache="true"></caching>
    <cgi />
    <defaultDocument enabled="true">
      <files>
        <add value="Default.htm" />
        <add value="Default.asp" />
        <add value="index.htm" />
        <add value="index.html" />
        <add value="iisstart.htm" />
        <add value="default.aspx" />
      </files>
    </defaultDocument>
    <directoryBrowse enabled="false" />
    <fastCgi />
    <!--

          The <globalModules> section defines all native-code modules.
          To enable a module, specify it in the <modules> section.

        -->
    <globalModules>
      <add name="HttpLoggingModule" image="%IIS_BIN%\loghttp.dll" />
      <add name="UriCacheModule" image="%IIS_BIN%\cachuri.dll" />
      <!--            <add name="FileCacheModule" image="%IIS_BIN%\cachfile.dll" />  -->
      <add name="TokenCacheModule" image="%IIS_BIN%\cachtokn.dll" />
      <!--            <add name="HttpCacheModule" image="%IIS_BIN%\cachhttp.dll" /> -->
      <add name="DynamicCompressionModule" image="%IIS_BIN%\compdyn.dll" />
      <add name="StaticCompressionModule" image="%IIS_BIN%\compstat.dll" />
      <add name="DefaultDocumentModule" image="%IIS_BIN%\defdoc.dll" />
      <add name="DirectoryListingModule" image="%IIS_BIN%\dirlist.dll" />
      <add name="ProtocolSupportModule" image="%IIS_BIN%\protsup.dll" />
      <add name="HttpRedirectionModule" image="%IIS_BIN%\redirect.dll" />
      <add name="ServerSideIncludeModule" image="%IIS_BIN%\iis_ssi.dll" />
      <add name="StaticFileModule" image="%IIS_BIN%\static.dll" />
      <add name="AnonymousAuthenticationModule" image="%IIS_BIN%\authanon.dll" />
      <add name="CertificateMappingAuthenticationModule" image="%IIS_BIN%\authcert.dll" />
      <add name="UrlAuthorizationModule" image="%IIS_BIN%\urlauthz.dll" />
      <add name="BasicAuthenticationModule" image="%IIS_BIN%\authbas.dll" />
      <add name="WindowsAuthenticationModule" image="%IIS_BIN%\authsspi.dll" />
      <!--            <add name="DigestAuthenticationModule" image="%IIS_BIN%\authmd5.dll" /> -->
      <add name="IISCertificateMappingAuthenticationModule" image="%IIS_BIN%\authmap.dll" />
      <add name="IpRestrictionModule" image="%IIS_BIN%\iprestr.dll" />
      <add name="DynamicIpRestrictionModule" image="%IIS_BIN%\diprestr.dll" />
      <add name="RequestFilteringModule" image="%IIS_BIN%\modrqflt.dll" />
      <add name="CustomLoggingModule" image="%IIS_BIN%\logcust.dll" />
      <add name="CustomErrorModule" image="%IIS_BIN%\custerr.dll" />
      <!--            <add name="TracingModule" image="%IIS_BIN%\iisetw.dll" /> -->
      <add name="FailedRequestsTracingModule" image="%IIS_BIN%\iisfreb.dll" />
      <add name="RequestMonitorModule" image="%IIS_BIN%\iisreqs.dll" />
      <add name="IsapiModule" image="%IIS_BIN%\isapi.dll" />
      <add name="IsapiFilterModule" image="%IIS_BIN%\filter.dll" />
      <add name="CgiModule" image="%IIS_BIN%\cgi.dll" />
      <add name="FastCgiModule" image="%IIS_BIN%\iisfcgi.dll" />
      <!--            <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> -->
      <add name="RewriteModule" image="%IIS_BIN%\rewrite.dll" />
      <add name="ConfigurationValidationModule" image="%IIS_BIN%\validcfg.dll" />
      <add name="WebSocketModule" image="%IIS_BIN%\iiswsock.dll" />
      <add name="WebMatrixSupportModule" image="%IIS_BIN%\webmatrixsup.dll" />
      <add name="ManagedEngine" image="%windir%\Microsoft.NET\Framework\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness32" />
      <add name="ManagedEngine64" image="%windir%\Microsoft.NET\Framework64\v2.0.50727\webengine.dll" preCondition="integratedMode,runtimeVersionv2.0,bitness64" />
      <add name="ManagedEngineV4.0_32bit" image="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness32" />
      <add name="ManagedEngineV4.0_64bit" image="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" preCondition="integratedMode,runtimeVersionv4.0,bitness64" />
      <add name="ApplicationInitializationModule" image="%IIS_BIN%\warmup.dll" />
      <add name="AspNetCoreModule" image="%IIS_BIN%\aspnetcore.dll" />
    </globalModules>
    <httpCompression directory="%TEMP%\iisexpress\IIS Temporary Compressed Files">
      <scheme name="gzip" dll="%IIS_BIN%\gzip.dll" />
      <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/xaml+xml" enabled="true" />
        <add mimeType="*/*" enabled="false" />
      </dynamicTypes>
      <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="image/svg+xml" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/xaml+xml" enabled="true" />
        <add mimeType="*/*" enabled="false" />
      </staticTypes>
    </httpCompression>
    <httpErrors lockAttributes="allowAbsolutePathsWhenDelegated,defaultPath">
      <error statusCode="401" prefixLanguageFilePath="%IIS_BIN%\custerr" path="401.htm" />
      <error statusCode="403" prefixLanguageFilePath="%IIS_BIN%\custerr" path="403.htm" />
      <error statusCode="404" prefixLanguageFilePath="%IIS_BIN%\custerr" path="404.htm" />
      <error statusCode="405" prefixLanguageFilePath="%IIS_BIN%\custerr" path="405.htm" />
      <error statusCode="406" prefixLanguageFilePath="%IIS_BIN%\custerr" path="406.htm" />
      <error statusCode="412" prefixLanguageFilePath="%IIS_BIN%\custerr" path="412.htm" />
      <error statusCode="500" prefixLanguageFilePath="%IIS_BIN%\custerr" path="500.htm" />
      <error statusCode="501" prefixLanguageFilePath="%IIS_BIN%\custerr" path="501.htm" />
      <error statusCode="502" prefixLanguageFilePath="%IIS_BIN%\custerr" path="502.htm" />
    </httpErrors>
    <httpLogging dontLog="false" />
    <httpProtocol>
      <customHeaders>
        <clear />
        <add name="X-Powered-By" value="ASP.NET" />
      </customHeaders>
      <redirectHeaders>
        <clear />
      </redirectHeaders>
    </httpProtocol>
    <httpRedirect enabled="false" />
    <httpTracing></httpTracing>
    <isapiFilters>
      <filter name="ASP.Net_2.0.50727-64" path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv2.0" />
      <filter name="ASP.Net_2.0.50727.0" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv2.0" />
      <filter name="ASP.Net_2.0_for_v1.1" path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_filter.dll" enableCache="true" preCondition="runtimeVersionv1.1" />
      <filter name="ASP.Net_4.0_32bit" path="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness32,runtimeVersionv4.0" />
      <filter name="ASP.Net_4.0_64bit" path="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_filter.dll" enableCache="true" preCondition="bitness64,runtimeVersionv4.0" />
    </isapiFilters>
    <odbcLogging />
    <security>
      <access sslFlags="None" />
      <applicationDependencies>
        <application name="Active Server Pages" groupId="ASP" />
      </applicationDependencies>
      <authentication>
        <anonymousAuthentication enabled="true" userName="" />
        <basicAuthentication enabled="false" />
        <clientCertificateMappingAuthentication enabled="false" />
        <digestAuthentication enabled="false" />
        <iisClientCertificateMappingAuthentication enabled="false"></iisClientCertificateMappingAuthentication>
        <windowsAuthentication enabled="false">
          <providers>
            <add value="Negotiate" />
            <add value="NTLM" />
          </providers>
        </windowsAuthentication>
      </authentication>
      <authorization>
        <add accessType="Allow" users="*" />
      </authorization>
      <ipSecurity allowUnlisted="true" />
      <isapiCgiRestriction notListedIsapisAllowed="true" notListedCgisAllowed="true">
        <add path="%windir%\Microsoft.NET\Framework64\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
        <add path="%windir%\Microsoft.NET\Framework\v4.0.30319\webengine4.dll" allowed="true" groupId="ASP.NET_v4.0" description="ASP.NET_v4.0" />
        <add path="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
        <add path="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" allowed="true" groupId="ASP.NET v2.0.50727" description="ASP.NET v2.0.50727" />
      </isapiCgiRestriction>
      <requestFiltering>
        <fileExtensions allowUnlisted="true" applyToWebDAV="true">
          <add fileExtension=".asa" allowed="false" />
          <add fileExtension=".asax" allowed="false" />
          <add fileExtension=".ascx" allowed="false" />
          <add fileExtension=".master" allowed="false" />
          <add fileExtension=".skin" allowed="false" />
          <add fileExtension=".browser" allowed="false" />
          <add fileExtension=".sitemap" allowed="false" />
          <add fileExtension=".config" allowed="false" />
          <add fileExtension=".cs" allowed="false" />
          <add fileExtension=".csproj" allowed="false" />
          <add fileExtension=".vb" allowed="false" />
          <add fileExtension=".vbproj" allowed="false" />
          <add fileExtension=".webinfo" allowed="false" />
          <add fileExtension=".licx" allowed="false" />
          <add fileExtension=".resx" allowed="false" />
          <add fileExtension=".resources" allowed="false" />
          <add fileExtension=".mdb" allowed="false" />
          <add fileExtension=".vjsproj" allowed="false" />
          <add fileExtension=".java" allowed="false" />
          <add fileExtension=".jsl" allowed="false" />
          <add fileExtension=".ldb" allowed="false" />
          <add fileExtension=".dsdgm" allowed="false" />
          <add fileExtension=".ssdgm" allowed="false" />
          <add fileExtension=".lsad" allowed="false" />
          <add fileExtension=".ssmap" allowed="false" />
          <add fileExtension=".cd" allowed="false" />
          <add fileExtension=".dsprototype" allowed="false" />
          <add fileExtension=".lsaprototype" allowed="false" />
          <add fileExtension=".sdm" allowed="false" />
          <add fileExtension=".sdmDocument" allowed="false" />
          <add fileExtension=".mdf" allowed="false" />
          <add fileExtension=".ldf" allowed="false" />
          <add fileExtension=".ad" allowed="false" />
          <add fileExtension=".dd" allowed="false" />
          <add fileExtension=".ldd" allowed="false" />
          <add fileExtension=".sd" allowed="false" />
          <add fileExtension=".adprototype" allowed="false" />
          <add fileExtension=".lddprototype" allowed="false" />
          <add fileExtension=".exclude" allowed="false" />
          <add fileExtension=".refresh" allowed="false" />
          <add fileExtension=".compiled" allowed="false" />
          <add fileExtension=".msgx" allowed="false" />
          <add fileExtension=".vsdisco" allowed="false" />
          <add fileExtension=".rules" allowed="false" />
        </fileExtensions>
        <verbs allowUnlisted="true" applyToWebDAV="true" />
        <hiddenSegments applyToWebDAV="true">
          <add segment="web.config" />
          <add segment="bin" />
          <add segment="App_code" />
          <add segment="App_GlobalResources" />
          <add segment="App_LocalResources" />
          <add segment="App_WebReferences" />
          <add segment="App_Data" />
          <add segment="App_Browsers" />
        </hiddenSegments>
      </requestFiltering>
    </security>
    <serverSideInclude ssiExecDisable="false" />
    <staticContent lockAttributes="isDocFooterFileName">
      <mimeMap fileExtension=".323" mimeType="text/h323" />
      <mimeMap fileExtension=".3g2" mimeType="video/3gpp2" />
      <mimeMap fileExtension=".3gp2" mimeType="video/3gpp2" />
      <mimeMap fileExtension=".3gp" mimeType="video/3gpp" />
      <mimeMap fileExtension=".3gpp" mimeType="video/3gpp" />
      <mimeMap fileExtension=".aac" mimeType="audio/aac" />
      <mimeMap fileExtension=".aaf" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".aca" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".accdb" mimeType="application/msaccess" />
      <mimeMap fileExtension=".accde" mimeType="application/msaccess" />
      <mimeMap fileExtension=".accdt" mimeType="application/msaccess" />
      <mimeMap fileExtension=".acx" mimeType="application/internet-property-stream" />
      <mimeMap fileExtension=".adt" mimeType="audio/vnd.dlna.adts" />
      <mimeMap fileExtension=".adts" mimeType="audio/vnd.dlna.adts" />
      <mimeMap fileExtension=".afm" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".ai" mimeType="application/postscript" />
      <mimeMap fileExtension=".aif" mimeType="audio/x-aiff" />
      <mimeMap fileExtension=".aifc" mimeType="audio/aiff" />
      <mimeMap fileExtension=".aiff" mimeType="audio/aiff" />
      <mimeMap fileExtension=".appcache" mimeType="text/cache-manifest" />
      <mimeMap fileExtension=".application" mimeType="application/x-ms-application" />
      <mimeMap fileExtension=".art" mimeType="image/x-jg" />
      <mimeMap fileExtension=".asd" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".asf" mimeType="video/x-ms-asf" />
      <mimeMap fileExtension=".asi" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".asm" mimeType="text/plain" />
      <mimeMap fileExtension=".asr" mimeType="video/x-ms-asf" />
      <mimeMap fileExtension=".asx" mimeType="video/x-ms-asf" />
      <mimeMap fileExtension=".atom" mimeType="application/atom+xml" />
      <mimeMap fileExtension=".au" mimeType="audio/basic" />
      <mimeMap fileExtension=".avi" mimeType="video/msvideo" />
      <mimeMap fileExtension=".axs" mimeType="application/olescript" />
      <mimeMap fileExtension=".bas" mimeType="text/plain" />
      <mimeMap fileExtension=".bcpio" mimeType="application/x-bcpio" />
      <mimeMap fileExtension=".bin" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".bmp" mimeType="image/bmp" />
      <mimeMap fileExtension=".c" mimeType="text/plain" />
      <mimeMap fileExtension=".cab" mimeType="application/vnd.ms-cab-compressed" />
      <mimeMap fileExtension=".calx" mimeType="application/vnd.ms-office.calx" />
      <mimeMap fileExtension=".cat" mimeType="application/vnd.ms-pki.seccat" />
      <mimeMap fileExtension=".cdf" mimeType="application/x-cdf" />
      <mimeMap fileExtension=".chm" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".class" mimeType="application/x-java-applet" />
      <mimeMap fileExtension=".clp" mimeType="application/x-msclip" />
      <mimeMap fileExtension=".cmx" mimeType="image/x-cmx" />
      <mimeMap fileExtension=".cnf" mimeType="text/plain" />
      <mimeMap fileExtension=".cod" mimeType="image/cis-cod" />
      <mimeMap fileExtension=".cpio" mimeType="application/x-cpio" />
      <mimeMap fileExtension=".cpp" mimeType="text/plain" />
      <mimeMap fileExtension=".crd" mimeType="application/x-mscardfile" />
      <mimeMap fileExtension=".crl" mimeType="application/pkix-crl" />
      <mimeMap fileExtension=".crt" mimeType="application/x-x509-ca-cert" />
      <mimeMap fileExtension=".csh" mimeType="application/x-csh" />
      <mimeMap fileExtension=".css" mimeType="text/css" />
      <mimeMap fileExtension=".csv" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".cur" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".dcr" mimeType="application/x-director" />
      <mimeMap fileExtension=".deploy" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".der" mimeType="application/x-x509-ca-cert" />
      <mimeMap fileExtension=".dib" mimeType="image/bmp" />
      <mimeMap fileExtension=".dir" mimeType="application/x-director" />
      <mimeMap fileExtension=".disco" mimeType="text/xml" />
      <mimeMap fileExtension=".dll" mimeType="application/x-msdownload" />
      <mimeMap fileExtension=".dll.config" mimeType="text/xml" />
      <mimeMap fileExtension=".dlm" mimeType="text/dlm" />
      <mimeMap fileExtension=".doc" mimeType="application/msword" />
      <mimeMap fileExtension=".docm" mimeType="application/vnd.ms-word.document.macroEnabled.12" />
      <mimeMap fileExtension=".docx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" />
      <mimeMap fileExtension=".dot" mimeType="application/msword" />
      <mimeMap fileExtension=".dotm" mimeType="application/vnd.ms-word.template.macroEnabled.12" />
      <mimeMap fileExtension=".dotx" mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.template" />
      <mimeMap fileExtension=".dsp" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".dtd" mimeType="text/xml" />
      <mimeMap fileExtension=".dvi" mimeType="application/x-dvi" />
      <mimeMap fileExtension=".dvr-ms" mimeType="video/x-ms-dvr" />
      <mimeMap fileExtension=".dwf" mimeType="drawing/x-dwf" />
      <mimeMap fileExtension=".dwp" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".dxr" mimeType="application/x-director" />
      <mimeMap fileExtension=".eml" mimeType="message/rfc822" />
      <mimeMap fileExtension=".emz" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".eot" mimeType="application/vnd.ms-fontobject" />
      <mimeMap fileExtension=".eps" mimeType="application/postscript" />
      <mimeMap fileExtension=".etx" mimeType="text/x-setext" />
      <mimeMap fileExtension=".evy" mimeType="application/envoy" />
      <mimeMap fileExtension=".exe" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".exe.config" mimeType="text/xml" />
      <mimeMap fileExtension=".fdf" mimeType="application/vnd.fdf" />
      <mimeMap fileExtension=".fif" mimeType="application/fractals" />
      <mimeMap fileExtension=".fla" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".flr" mimeType="x-world/x-vrml" />
      <mimeMap fileExtension=".flv" mimeType="video/x-flv" />
      <mimeMap fileExtension=".gif" mimeType="image/gif" />
      <mimeMap fileExtension=".gtar" mimeType="application/x-gtar" />
      <mimeMap fileExtension=".gz" mimeType="application/x-gzip" />
      <mimeMap fileExtension=".h" mimeType="text/plain" />
      <mimeMap fileExtension=".hdf" mimeType="application/x-hdf" />
      <mimeMap fileExtension=".hdml" mimeType="text/x-hdml" />
      <mimeMap fileExtension=".hhc" mimeType="application/x-oleobject" />
      <mimeMap fileExtension=".hhk" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".hhp" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".hlp" mimeType="application/winhlp" />
      <mimeMap fileExtension=".hqx" mimeType="application/mac-binhex40" />
      <mimeMap fileExtension=".hta" mimeType="application/hta" />
      <mimeMap fileExtension=".htc" mimeType="text/x-component" />
      <mimeMap fileExtension=".htm" mimeType="text/html" />
      <mimeMap fileExtension=".html" mimeType="text/html" />
      <mimeMap fileExtension=".htt" mimeType="text/webviewhtml" />
      <mimeMap fileExtension=".hxt" mimeType="text/html" />
      <mimeMap fileExtension=".ico" mimeType="image/x-icon" />
      <mimeMap fileExtension=".ics" mimeType="text/calendar" />
      <mimeMap fileExtension=".ief" mimeType="image/ief" />
      <mimeMap fileExtension=".iii" mimeType="application/x-iphone" />
      <mimeMap fileExtension=".inf" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".ins" mimeType="application/x-internet-signup" />
      <mimeMap fileExtension=".isp" mimeType="application/x-internet-signup" />
      <mimeMap fileExtension=".IVF" mimeType="video/x-ivf" />
      <mimeMap fileExtension=".jar" mimeType="application/java-archive" />
      <mimeMap fileExtension=".java" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".jck" mimeType="application/liquidmotion" />
      <mimeMap fileExtension=".jcz" mimeType="application/liquidmotion" />
      <mimeMap fileExtension=".jfif" mimeType="image/pjpeg" />
      <mimeMap fileExtension=".jpb" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".jpe" mimeType="image/jpeg" />
      <mimeMap fileExtension=".jpeg" mimeType="image/jpeg" />
      <mimeMap fileExtension=".jpg" mimeType="image/jpeg" />
      <mimeMap fileExtension=".js" mimeType="application/javascript" />
      <mimeMap fileExtension=".json" mimeType="application/json" />
      <mimeMap fileExtension=".jsonld" mimeType="application/ld+json" />
      <mimeMap fileExtension=".jsx" mimeType="text/jscript" />
      <mimeMap fileExtension=".latex" mimeType="application/x-latex" />
      <mimeMap fileExtension=".less" mimeType="text/css" />
      <mimeMap fileExtension=".lit" mimeType="application/x-ms-reader" />
      <mimeMap fileExtension=".lpk" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".lsf" mimeType="video/x-la-asf" />
      <mimeMap fileExtension=".lsx" mimeType="video/x-la-asf" />
      <mimeMap fileExtension=".lzh" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".m13" mimeType="application/x-msmediaview" />
      <mimeMap fileExtension=".m14" mimeType="application/x-msmediaview" />
      <mimeMap fileExtension=".m1v" mimeType="video/mpeg" />
      <mimeMap fileExtension=".m2ts" mimeType="video/vnd.dlna.mpeg-tts" />
      <mimeMap fileExtension=".m3u" mimeType="audio/x-mpegurl" />
      <mimeMap fileExtension=".m4a" mimeType="audio/mp4" />
      <mimeMap fileExtension=".m4v" mimeType="video/mp4" />
      <mimeMap fileExtension=".man" mimeType="application/x-troff-man" />
      <mimeMap fileExtension=".manifest" mimeType="application/x-ms-manifest" />
      <mimeMap fileExtension=".map" mimeType="text/plain" />
      <mimeMap fileExtension=".mdb" mimeType="application/x-msaccess" />
      <mimeMap fileExtension=".mdp" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".me" mimeType="application/x-troff-me" />
      <mimeMap fileExtension=".mht" mimeType="message/rfc822" />
      <mimeMap fileExtension=".mhtml" mimeType="message/rfc822" />
      <mimeMap fileExtension=".mid" mimeType="audio/mid" />
      <mimeMap fileExtension=".midi" mimeType="audio/mid" />
      <mimeMap fileExtension=".mix" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".mmf" mimeType="application/x-smaf" />
      <mimeMap fileExtension=".mno" mimeType="text/xml" />
      <mimeMap fileExtension=".mny" mimeType="application/x-msmoney" />
      <mimeMap fileExtension=".mov" mimeType="video/quicktime" />
      <mimeMap fileExtension=".movie" mimeType="video/x-sgi-movie" />
      <mimeMap fileExtension=".mp2" mimeType="video/mpeg" />
      <mimeMap fileExtension=".mp3" mimeType="audio/mpeg" />
      <mimeMap fileExtension=".mp4" mimeType="video/mp4" />
      <mimeMap fileExtension=".mp4v" mimeType="video/mp4" />
      <mimeMap fileExtension=".mpa" mimeType="video/mpeg" />
      <mimeMap fileExtension=".mpe" mimeType="video/mpeg" />
      <mimeMap fileExtension=".mpeg" mimeType="video/mpeg" />
      <mimeMap fileExtension=".mpg" mimeType="video/mpeg" />
      <mimeMap fileExtension=".mpp" mimeType="application/vnd.ms-project" />
      <mimeMap fileExtension=".mpv2" mimeType="video/mpeg" />
      <mimeMap fileExtension=".ms" mimeType="application/x-troff-ms" />
      <mimeMap fileExtension=".msi" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".mso" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".mvb" mimeType="application/x-msmediaview" />
      <mimeMap fileExtension=".mvc" mimeType="application/x-miva-compiled" />
      <mimeMap fileExtension=".nc" mimeType="application/x-netcdf" />
      <mimeMap fileExtension=".nsc" mimeType="video/x-ms-asf" />
      <mimeMap fileExtension=".nws" mimeType="message/rfc822" />
      <mimeMap fileExtension=".ocx" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".oda" mimeType="application/oda" />
      <mimeMap fileExtension=".odc" mimeType="text/x-ms-odc" />
      <mimeMap fileExtension=".ods" mimeType="application/oleobject" />
      <mimeMap fileExtension=".oga" mimeType="audio/ogg" />
      <mimeMap fileExtension=".ogg" mimeType="video/ogg" />
      <mimeMap fileExtension=".ogv" mimeType="video/ogg" />
      <mimeMap fileExtension=".one" mimeType="application/onenote" />
      <mimeMap fileExtension=".onea" mimeType="application/onenote" />
      <mimeMap fileExtension=".onetoc" mimeType="application/onenote" />
      <mimeMap fileExtension=".onetoc2" mimeType="application/onenote" />
      <mimeMap fileExtension=".onetmp" mimeType="application/onenote" />
      <mimeMap fileExtension=".onepkg" mimeType="application/onenote" />
      <mimeMap fileExtension=".osdx" mimeType="application/opensearchdescription+xml" />
      <mimeMap fileExtension=".otf" mimeType="font/otf" />
      <mimeMap fileExtension=".p10" mimeType="application/pkcs10" />
      <mimeMap fileExtension=".p12" mimeType="application/x-pkcs12" />
      <mimeMap fileExtension=".p7b" mimeType="application/x-pkcs7-certificates" />
      <mimeMap fileExtension=".p7c" mimeType="application/pkcs7-mime" />
      <mimeMap fileExtension=".p7m" mimeType="application/pkcs7-mime" />
      <mimeMap fileExtension=".p7r" mimeType="application/x-pkcs7-certreqresp" />
      <mimeMap fileExtension=".p7s" mimeType="application/pkcs7-signature" />
      <mimeMap fileExtension=".pbm" mimeType="image/x-portable-bitmap" />
      <mimeMap fileExtension=".pcx" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".pcz" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".pdf" mimeType="application/pdf" />
      <mimeMap fileExtension=".pfb" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".pfm" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".pfx" mimeType="application/x-pkcs12" />
      <mimeMap fileExtension=".pgm" mimeType="image/x-portable-graymap" />
      <mimeMap fileExtension=".pko" mimeType="application/vnd.ms-pki.pko" />
      <mimeMap fileExtension=".pma" mimeType="application/x-perfmon" />
      <mimeMap fileExtension=".pmc" mimeType="application/x-perfmon" />
      <mimeMap fileExtension=".pml" mimeType="application/x-perfmon" />
      <mimeMap fileExtension=".pmr" mimeType="application/x-perfmon" />
      <mimeMap fileExtension=".pmw" mimeType="application/x-perfmon" />
      <mimeMap fileExtension=".png" mimeType="image/png" />
      <mimeMap fileExtension=".pnm" mimeType="image/x-portable-anymap" />
      <mimeMap fileExtension=".pnz" mimeType="image/png" />
      <mimeMap fileExtension=".pot" mimeType="application/vnd.ms-powerpoint" />
      <mimeMap fileExtension=".potm" mimeType="application/vnd.ms-powerpoint.template.macroEnabled.12" />
      <mimeMap fileExtension=".potx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.template" />
      <mimeMap fileExtension=".ppam" mimeType="application/vnd.ms-powerpoint.addin.macroEnabled.12" />
      <mimeMap fileExtension=".ppm" mimeType="image/x-portable-pixmap" />
      <mimeMap fileExtension=".pps" mimeType="application/vnd.ms-powerpoint" />
      <mimeMap fileExtension=".ppsm" mimeType="application/vnd.ms-powerpoint.slideshow.macroEnabled.12" />
      <mimeMap fileExtension=".ppsx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slideshow" />
      <mimeMap fileExtension=".ppt" mimeType="application/vnd.ms-powerpoint" />
      <mimeMap fileExtension=".pptm" mimeType="application/vnd.ms-powerpoint.presentation.macroEnabled.12" />
      <mimeMap fileExtension=".pptx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.presentation" />
      <mimeMap fileExtension=".prf" mimeType="application/pics-rules" />
      <mimeMap fileExtension=".prm" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".prx" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".ps" mimeType="application/postscript" />
      <mimeMap fileExtension=".psd" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".psm" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".psp" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".pub" mimeType="application/x-mspublisher" />
      <mimeMap fileExtension=".qt" mimeType="video/quicktime" />
      <mimeMap fileExtension=".qtl" mimeType="application/x-quicktimeplayer" />
      <mimeMap fileExtension=".qxd" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".ra" mimeType="audio/x-pn-realaudio" />
      <mimeMap fileExtension=".ram" mimeType="audio/x-pn-realaudio" />
      <mimeMap fileExtension=".rar" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".ras" mimeType="image/x-cmu-raster" />
      <mimeMap fileExtension=".rf" mimeType="image/vnd.rn-realflash" />
      <mimeMap fileExtension=".rgb" mimeType="image/x-rgb" />
      <mimeMap fileExtension=".rm" mimeType="application/vnd.rn-realmedia" />
      <mimeMap fileExtension=".rmi" mimeType="audio/mid" />
      <mimeMap fileExtension=".roff" mimeType="application/x-troff" />
      <mimeMap fileExtension=".rpm" mimeType="audio/x-pn-realaudio-plugin" />
      <mimeMap fileExtension=".rtf" mimeType="application/rtf" />
      <mimeMap fileExtension=".rtx" mimeType="text/richtext" />
      <mimeMap fileExtension=".scd" mimeType="application/x-msschedule" />
      <mimeMap fileExtension=".sct" mimeType="text/scriptlet" />
      <mimeMap fileExtension=".sea" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".setpay" mimeType="application/set-payment-initiation" />
      <mimeMap fileExtension=".setreg" mimeType="application/set-registration-initiation" />
      <mimeMap fileExtension=".sgml" mimeType="text/sgml" />
      <mimeMap fileExtension=".sh" mimeType="application/x-sh" />
      <mimeMap fileExtension=".shar" mimeType="application/x-shar" />
      <mimeMap fileExtension=".sit" mimeType="application/x-stuffit" />
      <mimeMap fileExtension=".sldm" mimeType="application/vnd.ms-powerpoint.slide.macroEnabled.12" />
      <mimeMap fileExtension=".sldx" mimeType="application/vnd.openxmlformats-officedocument.presentationml.slide" />
      <mimeMap fileExtension=".smd" mimeType="audio/x-smd" />
      <mimeMap fileExtension=".smi" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".smx" mimeType="audio/x-smd" />
      <mimeMap fileExtension=".smz" mimeType="audio/x-smd" />
      <mimeMap fileExtension=".snd" mimeType="audio/basic" />
      <mimeMap fileExtension=".snp" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".spc" mimeType="application/x-pkcs7-certificates" />
      <mimeMap fileExtension=".spl" mimeType="application/futuresplash" />
      <mimeMap fileExtension=".spx" mimeType="audio/ogg" />
      <mimeMap fileExtension=".src" mimeType="application/x-wais-source" />
      <mimeMap fileExtension=".ssm" mimeType="application/streamingmedia" />
      <mimeMap fileExtension=".sst" mimeType="application/vnd.ms-pki.certstore" />
      <mimeMap fileExtension=".stl" mimeType="application/vnd.ms-pki.stl" />
      <mimeMap fileExtension=".sv4cpio" mimeType="application/x-sv4cpio" />
      <mimeMap fileExtension=".sv4crc" mimeType="application/x-sv4crc" />
      <mimeMap fileExtension=".svg" mimeType="image/svg+xml" />
      <mimeMap fileExtension=".svgz" mimeType="image/svg+xml" />
      <mimeMap fileExtension=".swf" mimeType="application/x-shockwave-flash" />
      <mimeMap fileExtension=".t" mimeType="application/x-troff" />
      <mimeMap fileExtension=".tar" mimeType="application/x-tar" />
      <mimeMap fileExtension=".tcl" mimeType="application/x-tcl" />
      <mimeMap fileExtension=".tex" mimeType="application/x-tex" />
      <mimeMap fileExtension=".texi" mimeType="application/x-texinfo" />
      <mimeMap fileExtension=".texinfo" mimeType="application/x-texinfo" />
      <mimeMap fileExtension=".tgz" mimeType="application/x-compressed" />
      <mimeMap fileExtension=".thmx" mimeType="application/vnd.ms-officetheme" />
      <mimeMap fileExtension=".thn" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".tif" mimeType="image/tiff" />
      <mimeMap fileExtension=".tiff" mimeType="image/tiff" />
      <mimeMap fileExtension=".toc" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".tr" mimeType="application/x-troff" />
      <mimeMap fileExtension=".trm" mimeType="application/x-msterminal" />
      <mimeMap fileExtension=".ts" mimeType="video/vnd.dlna.mpeg-tts" />
      <mimeMap fileExtension=".tsv" mimeType="text/tab-separated-values" />
      <mimeMap fileExtension=".ttf" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".tts" mimeType="video/vnd.dlna.mpeg-tts" />
      <mimeMap fileExtension=".txt" mimeType="text/plain" />
      <mimeMap fileExtension=".u32" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".uls" mimeType="text/iuls" />
      <mimeMap fileExtension=".ustar" mimeType="application/x-ustar" />
      <mimeMap fileExtension=".vbs" mimeType="text/vbscript" />
      <mimeMap fileExtension=".vcf" mimeType="text/x-vcard" />
      <mimeMap fileExtension=".vcs" mimeType="text/plain" />
      <mimeMap fileExtension=".vdx" mimeType="application/vnd.ms-visio.viewer" />
      <mimeMap fileExtension=".vml" mimeType="text/xml" />
      <mimeMap fileExtension=".vsd" mimeType="application/vnd.visio" />
      <mimeMap fileExtension=".vss" mimeType="application/vnd.visio" />
      <mimeMap fileExtension=".vst" mimeType="application/vnd.visio" />
      <mimeMap fileExtension=".vsto" mimeType="application/x-ms-vsto" />
      <mimeMap fileExtension=".vsw" mimeType="application/vnd.visio" />
      <mimeMap fileExtension=".vsx" mimeType="application/vnd.visio" />
      <mimeMap fileExtension=".vtx" mimeType="application/vnd.visio" />
      <mimeMap fileExtension=".wav" mimeType="audio/wav" />
      <mimeMap fileExtension=".wax" mimeType="audio/x-ms-wax" />
      <mimeMap fileExtension=".wbmp" mimeType="image/vnd.wap.wbmp" />
      <mimeMap fileExtension=".wcm" mimeType="application/vnd.ms-works" />
      <mimeMap fileExtension=".wdb" mimeType="application/vnd.ms-works" />
      <mimeMap fileExtension=".webm" mimeType="video/webm" />
      <mimeMap fileExtension=".wks" mimeType="application/vnd.ms-works" />
      <mimeMap fileExtension=".wm" mimeType="video/x-ms-wm" />
      <mimeMap fileExtension=".wma" mimeType="audio/x-ms-wma" />
      <mimeMap fileExtension=".wmd" mimeType="application/x-ms-wmd" />
      <mimeMap fileExtension=".wmf" mimeType="application/x-msmetafile" />
      <mimeMap fileExtension=".wml" mimeType="text/vnd.wap.wml" />
      <mimeMap fileExtension=".wmlc" mimeType="application/vnd.wap.wmlc" />
      <mimeMap fileExtension=".wmls" mimeType="text/vnd.wap.wmlscript" />
      <mimeMap fileExtension=".wmlsc" mimeType="application/vnd.wap.wmlscriptc" />
      <mimeMap fileExtension=".wmp" mimeType="video/x-ms-wmp" />
      <mimeMap fileExtension=".wmv" mimeType="video/x-ms-wmv" />
      <mimeMap fileExtension=".wmx" mimeType="video/x-ms-wmx" />
      <mimeMap fileExtension=".wmz" mimeType="application/x-ms-wmz" />
      <mimeMap fileExtension=".woff" mimeType="font/x-woff" />
      <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
      <mimeMap fileExtension=".wps" mimeType="application/vnd.ms-works" />
      <mimeMap fileExtension=".wri" mimeType="application/x-mswrite" />
      <mimeMap fileExtension=".wrl" mimeType="x-world/x-vrml" />
      <mimeMap fileExtension=".wrz" mimeType="x-world/x-vrml" />
      <mimeMap fileExtension=".wsdl" mimeType="text/xml" />
      <mimeMap fileExtension=".wtv" mimeType="video/x-ms-wtv" />
      <mimeMap fileExtension=".wvx" mimeType="video/x-ms-wvx" />
      <mimeMap fileExtension=".x" mimeType="application/directx" />
      <mimeMap fileExtension=".xaf" mimeType="x-world/x-vrml" />
      <mimeMap fileExtension=".xaml" mimeType="application/xaml+xml" />
      <mimeMap fileExtension=".xap" mimeType="application/x-silverlight-app" />
      <mimeMap fileExtension=".xbap" mimeType="application/x-ms-xbap" />
      <mimeMap fileExtension=".xbm" mimeType="image/x-xbitmap" />
      <mimeMap fileExtension=".xdr" mimeType="text/plain" />
      <mimeMap fileExtension=".xht" mimeType="application/xhtml+xml" />
      <mimeMap fileExtension=".xhtml" mimeType="application/xhtml+xml" />
      <mimeMap fileExtension=".xla" mimeType="application/vnd.ms-excel" />
      <mimeMap fileExtension=".xlam" mimeType="application/vnd.ms-excel.addin.macroEnabled.12" />
      <mimeMap fileExtension=".xlc" mimeType="application/vnd.ms-excel" />
      <mimeMap fileExtension=".xlm" mimeType="application/vnd.ms-excel" />
      <mimeMap fileExtension=".xls" mimeType="application/vnd.ms-excel" />
      <mimeMap fileExtension=".xlsb" mimeType="application/vnd.ms-excel.sheet.binary.macroEnabled.12" />
      <mimeMap fileExtension=".xlsm" mimeType="application/vnd.ms-excel.sheet.macroEnabled.12" />
      <mimeMap fileExtension=".xlsx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
      <mimeMap fileExtension=".xlt" mimeType="application/vnd.ms-excel" />
      <mimeMap fileExtension=".xltm" mimeType="application/vnd.ms-excel.template.macroEnabled.12" />
      <mimeMap fileExtension=".xltx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.template" />
      <mimeMap fileExtension=".xlw" mimeType="application/vnd.ms-excel" />
      <mimeMap fileExtension=".xml" mimeType="text/xml" />
      <mimeMap fileExtension=".xof" mimeType="x-world/x-vrml" />
      <mimeMap fileExtension=".xpm" mimeType="image/x-xpixmap" />
      <mimeMap fileExtension=".xps" mimeType="application/vnd.ms-xpsdocument" />
      <mimeMap fileExtension=".xsd" mimeType="text/xml" />
      <mimeMap fileExtension=".xsf" mimeType="text/xml" />
      <mimeMap fileExtension=".xsl" mimeType="text/xml" />
      <mimeMap fileExtension=".xslt" mimeType="text/xml" />
      <mimeMap fileExtension=".xsn" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".xtp" mimeType="application/octet-stream" />
      <mimeMap fileExtension=".xwd" mimeType="image/x-xwindowdump" />
      <mimeMap fileExtension=".z" mimeType="application/x-compress" />
      <mimeMap fileExtension=".zip" mimeType="application/x-zip-compressed" />
    </staticContent>
    <tracing>
      <traceProviderDefinitions>
        <add name="WWW Server" guid="{3a2a4e84-4c21-4981-ae10-3fda0d9b0f83}">
          <areas>
            <clear />
            <add name="Authentication" value="2" />
            <add name="Security" value="4" />
            <add name="Filter" value="8" />
            <add name="StaticFile" value="16" />
            <add name="CGI" value="32" />
            <add name="Compression" value="64" />
            <add name="Cache" value="128" />
            <add name="RequestNotifications" value="256" />
            <add name="Module" value="512" />
            <add name="Rewrite" value="1024" />
            <add name="FastCGI" value="4096" />
            <add name="WebSocket" value="16384" />
          </areas>
        </add>
        <add name="ASP" guid="{06b94d9a-b15e-456e-a4ef-37c984a2cb4b}">
          <areas>
            <clear />
          </areas>
        </add>
        <add name="ISAPI Extension" guid="{a1c2040e-8840-4c31-ba11-9871031a19ea}">
          <areas>
            <clear />
          </areas>
        </add>
        <add name="ASPNET" guid="{AFF081FE-0247-4275-9C4E-021F3DC1DA35}">
          <areas>
            <add name="Infrastructure" value="1" />
            <add name="Module" value="2" />
            <add name="Page" value="4" />
            <add name="AppServices" value="8" />
          </areas>
        </add>
      </traceProviderDefinitions>
      <traceFailedRequests>
        <add path="*">
          <traceAreas>
            <add provider="ASP" verbosity="Verbose" />
            <add provider="ASPNET" areas="Infrastructure,Module,Page,AppServices" verbosity="Verbose" />
            <add provider="ISAPI Extension" verbosity="Verbose" />
            <add provider="WWW Server" areas="Authentication,Security,Filter,StaticFile,CGI,Compression,Cache,RequestNotifications,Module,Rewrite,WebSocket" verbosity="Verbose" />
          </traceAreas>
          <failureDefinitions statusCodes="200-999" />
        </add>
      </traceFailedRequests>
    </tracing>
    <urlCompression />
    <validation />
    <webdav>
      <globalSettings>
        <propertyStores>
          <add name="webdav_simple_prop" image="%IIS_BIN%\webdav_simple_prop.dll" image32="%IIS_BIN%\webdav_simple_prop.dll" />
        </propertyStores>
        <lockStores>
          <add name="webdav_simple_lock" image="%IIS_BIN%\webdav_simple_lock.dll" image32="%IIS_BIN%\webdav_simple_lock.dll" />
        </lockStores>
      </globalSettings>
      <authoring>
        <locks enabled="true" lockStore="webdav_simple_lock" />
      </authoring>
      <authoringRules />
    </webdav>
    <webSocket />
    <applicationInitialization />
  </system.webServer>
  <location path="" overrideMode="Allow">
    <system.webServer>
      <modules>
        <add name="IsapiFilterModule" lockItem="true" />
        <add name="BasicAuthenticationModule" lockItem="true" />
        <add name="IsapiModule" lockItem="true" />
        <add name="HttpLoggingModule" lockItem="true" />
        <!--
                <add name="HttpCacheModule" lockItem="true" />
-->
        <add name="DynamicCompressionModule" lockItem="true" />
        <add name="StaticCompressionModule" lockItem="true" />
        <add name="DefaultDocumentModule" lockItem="true" />
        <add name="DirectoryListingModule" lockItem="true" />
        <add name="ProtocolSupportModule" lockItem="true" />
        <add name="HttpRedirectionModule" lockItem="true" />
        <add name="ServerSideIncludeModule" lockItem="true" />
        <add name="StaticFileModule" lockItem="true" />
        <add name="AnonymousAuthenticationModule" lockItem="true" />
        <add name="CertificateMappingAuthenticationModule" lockItem="true" />
        <add name="UrlAuthorizationModule" lockItem="true" />
        <add name="WindowsAuthenticationModule" lockItem="true" />
        <!--
                <add name="DigestAuthenticationModule" lockItem="true" />
-->
        <add name="IISCertificateMappingAuthenticationModule" lockItem="true" />
        <add name="WebMatrixSupportModule" lockItem="true" />
        <add name="IpRestrictionModule" lockItem="true" />
        <add name="DynamicIpRestrictionModule" lockItem="true" />
        <add name="RequestFilteringModule" lockItem="true" />
        <add name="CustomLoggingModule" lockItem="true" />
        <add name="CustomErrorModule" lockItem="true" />
        <add name="FailedRequestsTracingModule" lockItem="true" />
        <add name="CgiModule" lockItem="true" />
        <add name="FastCgiModule" lockItem="true" />
        <!--                <add name="WebDAVModule" /> -->
        <add name="RewriteModule" />
        <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" preCondition="managedHandler" />
        <add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" />
        <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" preCondition="managedHandler" />
        <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" preCondition="managedHandler" />
        <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" preCondition="managedHandler" />
        <add name="RoleManager" type="System.Web.Security.RoleManagerModule" preCondition="managedHandler" />
        <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" preCondition="managedHandler" />
        <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule" preCondition="managedHandler" />
        <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" preCondition="managedHandler" />
        <add name="Profile" type="System.Web.Profile.ProfileModule" preCondition="managedHandler" />
        <add name="UrlMappingsModule" type="System.Web.UrlMappingsModule" preCondition="managedHandler" />
        <add name="ConfigurationValidationModule" lockItem="true" />
        <add name="WebSocketModule" lockItem="true" />
        <add name="ServiceModel-4.0" type="System.ServiceModel.Activation.ServiceHttpModule,System.ServiceModel.Activation,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
        <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="managedHandler,runtimeVersionv4.0" />
        <add name="ScriptModule-4.0" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="managedHandler,runtimeVersionv4.0" />
        <add name="ServiceModel" type="System.ServiceModel.Activation.HttpModule, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="managedHandler,runtimeVersionv2.0" />
        <add name="ApplicationInitializationModule" lockItem="true" />
        <add name="AspNetCoreModule" lockItem="true" />
      </modules>
      <handlers accessPolicy="Read, Script">
        <!--                <add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" /> -->
        <add name="AXD-ISAPI-4.0_64bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="PageHandlerFactory-ISAPI-4.0_64bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="SimpleHandlerFactory-ISAPI-4.0_64bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="WebServiceHandlerFactory-ISAPI-4.0_64bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_64bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_64bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="svc-ISAPI-4.0_64bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
        <add name="rules-ISAPI-4.0_64bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
        <add name="xoml-ISAPI-4.0_64bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
        <add name="xamlx-ISAPI-4.0_64bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />
        <add name="aspq-ISAPI-4.0_64bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="cshtm-ISAPI-4.0_64bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="cshtml-ISAPI-4.0_64bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="vbhtm-ISAPI-4.0_64bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="vbhtml-ISAPI-4.0_64bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="svc-Integrated" path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
        <add name="svc-ISAPI-2.0" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
        <add name="xoml-Integrated" path="*.xoml" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
        <add name="xoml-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
        <add name="rules-Integrated" path="*.rules" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
        <add name="rules-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" />
        <add name="AXD-ISAPI-4.0_32bit" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="PageHandlerFactory-ISAPI-4.0_32bit" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="SimpleHandlerFactory-ISAPI-4.0_32bit" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="WebServiceHandlerFactory-ISAPI-4.0_32bit" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="HttpRemotingHandlerFactory-rem-ISAPI-4.0_32bit" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="HttpRemotingHandlerFactory-soap-ISAPI-4.0_32bit" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="svc-ISAPI-4.0_32bit" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
        <add name="rules-ISAPI-4.0_32bit" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
        <add name="xoml-ISAPI-4.0_32bit" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
        <add name="xamlx-ISAPI-4.0_32bit" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" />
        <add name="aspq-ISAPI-4.0_32bit" path="*.aspq" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="cshtm-ISAPI-4.0_32bit" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="cshtml-ISAPI-4.0_32bit" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="vbhtm-ISAPI-4.0_32bit" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="vbhtml-ISAPI-4.0_32bit" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="TraceHandler-Integrated-4.0" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="WebAdminHandler-Integrated-4.0" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="AssemblyResourceLoader-Integrated-4.0" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="PageHandlerFactory-Integrated-4.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="WebServiceHandlerFactory-Integrated-4.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="HttpRemotingHandlerFactory-rem-Integrated-4.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="HttpRemotingHandlerFactory-soap-Integrated-4.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory, System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="svc-Integrated-4.0" path="*.svc" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="rules-Integrated-4.0" path="*.rules" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="xoml-Integrated-4.0" path="*.xoml" verb="*" type="System.ServiceModel.Activation.ServiceHttpHandlerFactory, System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="xamlx-Integrated-4.0" path="*.xamlx" verb="GET,HEAD,POST,DEBUG" type="System.Xaml.Hosting.XamlHttpHandlerFactory, System.Xaml.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="aspq-Integrated-4.0" path="*.aspq" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="cshtm-Integrated-4.0" path="*.cshtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="cshtml-Integrated-4.0" path="*.cshtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="vbhtm-Integrated-4.0" path="*.vbhtm" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="vbhtml-Integrated-4.0" path="*.vbhtml" verb="GET,HEAD,POST,DEBUG" type="System.Web.HttpForbiddenHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="ScriptHandlerFactoryAppServices-Integrated-4.0" path="*_AppService.axd" verb="*" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="ScriptResourceIntegrated-4.0" path="*ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="integratedMode,runtimeVersionv4.0" />
        <add name="ASPClassic" path="*.asp" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
        <add name="SecurityCertificate" path="*.cer" verb="GET,HEAD,POST" modules="IsapiModule" scriptProcessor="%IIS_BIN%\asp.dll" resourceType="File" />
        <add name="ISAPI-dll" path="*.dll" verb="*" modules="IsapiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
        <add name="TraceHandler-Integrated" path="trace.axd" verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TraceHandler" preCondition="integratedMode,runtimeVersionv2.0" />
        <add name="WebAdminHandler-Integrated" path="WebAdmin.axd" verb="GET,DEBUG" type="System.Web.Handlers.WebAdminHandler" preCondition="integratedMode,runtimeVersionv2.0" />
        <add name="AssemblyResourceLoader-Integrated" path="WebResource.axd" verb="GET,DEBUG" type="System.Web.Handlers.AssemblyResourceLoader" preCondition="integratedMode,runtimeVersionv2.0" />
        <add name="PageHandlerFactory-Integrated" path="*.aspx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.PageHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
        <add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" preCondition="integratedMode,runtimeVersionv2.0" />
        <add name="WebServiceHandlerFactory-Integrated" path="*.asmx" verb="GET,HEAD,POST,DEBUG" type="System.Web.Services.Protocols.WebServiceHandlerFactory,System.Web.Services,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" preCondition="integratedMode,runtimeVersionv2.0" />
        <add name="HttpRemotingHandlerFactory-rem-Integrated" path="*.rem" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
        <add name="HttpRemotingHandlerFactory-soap-Integrated" path="*.soap" verb="GET,HEAD,POST,DEBUG" type="System.Runtime.Remoting.Channels.Http.HttpRemotingHandlerFactory,System.Runtime.Remoting,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" preCondition="integratedMode,runtimeVersionv2.0" />
        <add name="AXD-ISAPI-2.0" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
        <add name="PageHandlerFactory-ISAPI-2.0" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
        <add name="SimpleHandlerFactory-ISAPI-2.0" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
        <add name="WebServiceHandlerFactory-ISAPI-2.0" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
        <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
        <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness32" responseBufferLimit="0" />
        <add name="svc-ISAPI-2.0-64" path="*.svc" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
        <add name="AXD-ISAPI-2.0-64" path="*.axd" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
        <add name="PageHandlerFactory-ISAPI-2.0-64" path="*.aspx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
        <add name="SimpleHandlerFactory-ISAPI-2.0-64" path="*.ashx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
        <add name="WebServiceHandlerFactory-ISAPI-2.0-64" path="*.asmx" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
        <add name="HttpRemotingHandlerFactory-rem-ISAPI-2.0-64" path="*.rem" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
        <add name="HttpRemotingHandlerFactory-soap-ISAPI-2.0-64" path="*.soap" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" responseBufferLimit="0" />
        <add name="rules-64-ISAPI-2.0" path="*.rules" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
        <add name="xoml-64-ISAPI-2.0" path="*.xoml" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv2.0,bitness64" />
        <add name="CGI-exe" path="*.exe" verb="*" modules="CgiModule" resourceType="File" requireAccess="Execute" allowPathInfo="true" />
        <add name="SSINC-stm" path="*.stm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
        <add name="SSINC-shtm" path="*.shtm" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
        <add name="SSINC-shtml" path="*.shtml" verb="GET,HEAD,POST" modules="ServerSideIncludeModule" resourceType="File" />
        <add name="TRACEVerbHandler" path="*" verb="TRACE" modules="ProtocolSupportModule" requireAccess="None" />
        <add name="OPTIONSVerbHandler" path="*" verb="OPTIONS" modules="ProtocolSupportModule" requireAccess="None" />
        <add name="ExtensionlessUrl-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
        <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
        <add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" />
        <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
      </handlers>
    </system.webServer>
  </location>
  <location path="Sodao.Core.Web">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" forwardWindowsAuthToken="false" stdoutLogEnabled="false" />
      <httpCompression>
        <dynamicCompression>
          <add mimeType="text/event-stream" enabled="false" />
        </dynamicCompression>
      </httpCompression>
    </system.webServer>
  </location>
</configuration>

================================================
FILE: src/Overt.Core.Data/Attribute/SubmeterAttribute.cs
================================================
using System;

namespace Overt.Core.Data
{
    /// <summary>
    /// 分表标识
    /// </summary>
    [Obsolete("请使用TableNameFunc")]
    public class SubmeterAttribute : Attribute
    {
        /// <summary>
        /// 16进制位数
        /// 1 16
        /// 2 256
        /// 3 4096 
        /// ...
        /// </summary>
        public int Bit { get; set; }
    }
}


================================================
FILE: src/Overt.Core.Data/Constants.cs
================================================
namespace Overt.Core.Data
{
    internal class Constants
    {
        public static class MSSQLVersion
        {
            /// <summary>
            /// SQLServer2012版本
            /// </summary>
            public const int SQLServer2012Bv = 11;
        }

    }
}


================================================
FILE: src/Overt.Core.Data/Contract/IBaseRepository.cs
================================================
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq.Expressions;
using System.Threading.Tasks;

namespace Overt.Core.Data
{
    /// <summary>
    /// 接口
    /// </summary>
    public interface IBaseRepository<TEntity> : IPropertyAssist where TEntity : class, new()
    {
        #region Sync Method
        /// <summary>
        /// 获取主表名
        /// </summary>
        /// <returns></returns>
        string GetMainTableName();

        /// <summary>
        /// 获取表名:内部会调用TableNameFunc 从主库中查询
        /// </summary>
        /// <returns></returns>
        string GetTableName();

        /// <summary>
        /// 获取表名:以Submeter分表位数获取表名
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        [Obsolete("请使用GetTableName")]
        string GetTableName(string key);

        /// <summary>
        /// 是否存在表
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="isMaster"></param>
        /// <returns></returns>
        bool IsExistTable(string tableName, bool isMaster = true);

        /// <summary>
        /// 是否存在字段
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="fieldName"></param>
        /// <param name="isMaster"></param>
        /// <returns></returns>
        bool IsExistField(string tableName, string fieldName, bool isMaster = true);

        /// <summary>
        /// 添加
        /// </summary>
        /// <param name="entity">数据实体</param>
        /// <param name="returnLastIdentity">是否赋值最后一次的自增ID</param>
        /// <returns>添加后的数据实体</returns>
        bool Add(TEntity entity, bool returnLastIdentity = false);

        /// <summary>
        /// 批量添加
        /// </summary>
        /// <param name="entities">数据实体</param>
        /// <returns>bool</returns>
        bool Add(params TEntity[] entities);

        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="expression">删除条件</param>
        /// <returns>是否成功</returns>
        bool Delete(Expression<Func<TEntity, bool>> expression);

        /// <summary>
        /// 更新
        /// </summary>
        /// <param name="entity">数据实体</param>
        /// <param name="fields">x=> x.SomeProperty1 or x=> new { x.SomeProperty1, x.SomeProperty2 }</param>
        /// <returns>是否成功</returns>
        bool Set(TEntity entity, Expression<Func<TEntity, object>> fields = null);

        /// <summary>
        /// 根据字段修改
        /// </summary>
        /// <param name="setExpress">修改字段表达式 object =>dynamic 是一个匿名类</param>
        /// <param name="whereExpress">条件表达式</param>
        /// <returns>是否成功</returns>
        bool Set(Expression<Func<object>> setExpress, Expression<Func<TEntity, bool>> whereExpress);

        /// <summary>
        /// 根据条件 在原字段上增减数据
        /// </summary>
        /// <param name="field">增减的字段</param>
        /// <param name="value">增减的值</param>
        /// <param name="whereExpress">条件表达式</param>
        /// <returns></returns>
        bool Incr<TValue>(string field, TValue value, Expression<Func<TEntity, bool>> whereExpress) where TValue : struct;

        /// <summary>
        /// 获取一条数据
        /// </summary>
        /// <param name="expression">查询条件</param>
        /// <param name="fieldExpressison">按字段返回</param>
        /// <param name="isMaster">是否主从</param>
        /// <returns>实体</returns>
        TEntity Get(Expression<Func<TEntity, bool>> expression, Expression<Func<TEntity, object>> fieldExpressison = null, bool isMaster = false);

        /// <summary>
        /// 获取列表 
        /// </summary>
        /// <param name="page"></param>
        /// <param name="rows"></param>
        /// <param name="expression">条件表达式</param>
        /// <param name="fieldExpressison">按字段返回</param>
        /// <param name="isMaster">是否主从</param>
        /// <param name="orderByFields">排序字段集合</param>
        /// <returns></returns>
        IEnumerable<TEntity> GetList(int page, int rows, Expression<Func<TEntity, bool>> expression = null, Expression<Func<TEntity, object>> fieldExpressison = null, bool isMaster = false, params OrderByField[] orderByFields);

        /// <summary>
        /// 获取列表 Offset
        /// </summary>
        /// <param name="offset"></param>
        /// <param name="size"></param>
        /// <param name="expression">条件表达式</param>
        /// <param name="fieldExpressison">按字段返回</param>
        /// <param name="isMaster">是否主从</param>
        /// <param name="orderByFields">排序字段集合</param>
        /// <returns></returns>
        IEnumerable<TEntity> GetOffsets(int offset, int size, Expression<Func<TEntity, bool>> expression = null, Expression<Func<TEntity, object>> fieldExpressison = null, bool isMaster = false, params OrderByField[] orderByFields);

        /// <summary>
        /// 获取数量
        /// </summary>
        /// <param name="expression">条件表达式</param>
        /// <param name="isMaster">是否主从</param>
        /// <returns></returns>
        int Count(Expression<Func<TEntity, bool>> expression = null, bool isMaster = false);
        #endregion

        #region Async Method
        /// <summary>
        /// 是否存在表
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="isMaster"></param>
        /// <returns></returns>
        Task<bool> IsExistTableAsync(string tableName, bool isMaster = true);

        /// <summary>
        /// 是否存在字段
        /// </summary>
        /// <param name="tableName"></param>
        /// <param name="fieldName"></param>
        /// <param name="isMaster"></param>
        /// <returns></returns>
        Task<bool> IsExistFieldAsync(string tableName, string fieldName, bool isMaster = true);

        /// <summary>
        /// 异步添加
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="returnLastIdentity">是否赋值最后一次的自增ID</param>
        /// <returns></returns>
        Task<bool> AddAsync(TEntity entity, bool returnLastIdentity = false);

        /// <summary>
        /// 异步批量添加
        /// </summary>
        /// <param name="entities">数据实体</param>
        /// <returns>bool</returns>
        /// <returns></returns>
        Task<bool> AddAsync(params TEntity[] entities);

        /// <summary>
        /// 异步删除
        /// </summary>
        /// <param name="expression">删除条件</param>
        /// <returns>是否成功</returns>
        Task<bool> DeleteAsync(Expression<Func<TEntity, bool>> expression);

        /// <summary>
        /// 异步更新
        /// </summary>
        /// <param name="entity">数据实体</param>
        /// <param name="fields">x=> x.SomeProperty1 or x=> new { x.SomeProperty1, x.SomeProperty2 }</param>
        /// <returns>是否成功</returns>
        Task<bool> SetAsync(TEntity entity, Expression<Func<TEntity, object>> fields = null);

        /// <summary>
        /// 异步根据字段修改
        /// </summary>
        /// <param name="setExpress">修改字段表达式</param>
        /// <param name="whereExpress">条件表达式</param>
        /// <returns>是否成功</returns>
        Task<bool> SetAsync(Expression<Func<object>> setExpress, Expression<Func<TEntity, bool>> whereExpress);

        /// <summary>
        /// 根据条件 在原字段上增减数据
        /// </summary>
        /// <param name="field">增减的字段</param>
        /// <param name="value">增减的值</param>
        /// <param name="whereExpress">条件表达式</param>
        /// <returns></returns>
        Task<bool> IncrAsync<TValue>(string field, TValue value, Expression<Func<TEntity, bool>> whereExpress) where TValue : struct;

        /// <summary>
        /// 异步获取一条数据
        /// </summary>
        /// <param name="expression">查询条件</param>
        /// <param name="fieldExpressison">按字段返回</param>
        /// <param name="isMaster">是否主从</param>
        /// <returns>实体</returns>
        Task<TEntity> GetAsync(Expression<Func<TEntity, bool>> expression, Expression<Func<TEntity, object>> fieldExpressison = null, bool isMaster = false);

        /// <summary>
        /// 异步获取列表
        /// </summary>
        /// <param name="page"></param>
        /// <param name="rows"></param>
        /// <param name="expression">条件表达式</param>
        /// <param name="fieldExpressison">按字段返回</param>
        /// <param name="isMaster">是否主从</param>
        /// <param name="orderByFields">排序字段集合</param>
        /// <returns></returns>
        Task<IEnumerable<TEntity>> GetListAsync(int page, int rows, Expression<Func<TEntity, bool>> expression = null, Expression<Func<TEntity, object>> fieldExpressison = null, bool isMaster = false, params OrderByField[] orderByFields);

        /// <summary>
        /// 异步获取列表 Offset
        /// </summary>
        /// <param name="offset"></param>
        /// <param name="size"></param>
        /// <param name="expression">条件表达式</param>
        /// <param name="fieldExpressison">按字段返回</param>
        /// <param name="isMaster">是否主从</param>
        /// <param name="orderByFields">排序字段集合</param>
        /// <returns></returns>
        Task<IEnumerable<TEntity>> GetOffsetsAsync(int offset, int size, Expression<Func<TEntity, bool>> expression = null, Expression<Func<TEntity, object>> fieldExpressison = null, bool isMaster = false, params OrderByField[] orderByFields);

        /// <summary>
        /// 异步获取数量
        /// </summary>
        /// <param name="expression">条件表达式</param>
        /// <param name="isMaster">是否主从</param>
        /// <returns></returns>
        Task<int> CountAsync(Expression<Func<TEntity, bool>> expression = null, bool isMaster = false);
        #endregion
    }
}


================================================
FILE: src/Overt.Core.Data/Contract/IPropertyAssist.cs
================================================
using System;
using System.Data;
#if !ASP_NET_CORE
using System.Configuration;
#endif

namespace Overt.Core.Data
{
    /// <summary>
    /// 通用的接口
    /// </summary>
    public interface IPropertyAssist
    {
        #region DbStoreKey
        /// <summary>
        /// 数据库key
        /// </summary>
        string DbStoreKey { get; set; }
        #endregion

        #region TableName
        /// <summary>
        /// 表名生成方法
        /// </summary>
        Func<string> TableNameFunc { get; set; }

        /// <summary>
        /// 创建表的sql语句
        /// 参数:表名
        /// </summary>
        Func<string, string> CreateScriptFunc { get; set; }
        #endregion

        #region ConnectionString
        /// <summary>
        /// 连接方法创建
        /// </summary>

#if ASP_NET_CORE
        Func<bool, string> ConnectionFunc { get; set; }
#else
        Func<bool, ConnectionStringSettings> ConnectionFunc { get; set; }
#endif
        #endregion

        #region Connection
        /// <summary>
        /// 打开连接
        /// </summary>
        /// <returns></returns>
        IDbConnection OpenConnection(bool isMaster = false);
        #endregion

        #region ExecuteScript
        /// <summary>
        /// 执行的sql脚本
        /// </summary>
        string ExecuteScript { get; set; }
        #endregion
    }
}


================================================
FILE: src/Overt.Core.Data/DataContext/DataContext.cs
================================================
#if ASP_NET_CORE
using Microsoft.Extensions.Configuration;
using System.IO;
#endif
using MySql.Data.MySqlClient;
using System;
#if !ASP_NET_CORE
using System.Configuration;
#endif
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;

namespace Overt.Core.Data
{
    /// <summary>
    /// 数据库连接工具类
    /// </summary>
    public class DataContext : IDisposable
    {
        #region Private Members
        readonly bool _isMaster;
        readonly string _dbStoreKey;
        DbProviderFactory _dbFactory;

#if ASP_NET_CORE
        readonly IConfiguration _configuration;
        readonly Func<bool, string> _connectionFunc;
#else
        readonly Func<bool, ConnectionStringSettings> _connectionFunc;
#endif


        #endregion

        #region Public Members
        /// <summary>
        /// 连接对象
        /// </summary>
        public IDbConnection DbConnection { get; private set; }
        #endregion

        #region Constructor
#if ASP_NET_CORE
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="configuration">if null 则从appsettings.json中获取</param>
        /// <param name="isMaster">是否从库</param>
        /// <param name="dbStoreKey">存储字符串标识</param>
        /// <param name="connectionFunc">连接字符串Func</param>
        public DataContext(IConfiguration configuration, bool isMaster = false, string dbStoreKey = "", Func<bool, string> connectionFunc = null)
        {
            _configuration = configuration;
            _isMaster = isMaster;
            _dbStoreKey = dbStoreKey;
            _connectionFunc = connectionFunc;

            // 打开连接
            CreateAndOpen();
        }
#else
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="isMaster">是否从库</param>
        /// <param name="dbStoreKey">存储字符串标识</param>
        /// <param name="connectionFunc">连接字符串Func</param>
        public DataContext(bool isMaster = false, string dbStoreKey = "", Func<bool, ConnectionStringSettings> connectionFunc = null)
        {
            _isMaster = isMaster;
            _dbStoreKey = dbStoreKey;
            _connectionFunc = connectionFunc;

            // 打开连接
            CreateAndOpen();
        }
#endif
        #endregion

        #region Private Method
        /// <summary>
        /// 打开链接
        /// </summary>
        private void CreateAndOpen()
        {
            var connectionString = string.Empty;
            var settings = DataSettings.Default;

            // 获取连接
#if ASP_NET_CORE
            var connectionSetting = settings.Get(_configuration, _isMaster, _dbStoreKey, _connectionFunc);
            connectionString = connectionSetting.Item1;
            _dbFactory = GetFactory(connectionSetting.Item2);
#else
            var connectionSetting = settings.Get(_isMaster, _dbStoreKey, _connectionFunc);
            connectionString = connectionSetting?.ConnectionString;
            _dbFactory = DbProviderFactories.GetFactory(connectionSetting?.ProviderName);
#endif

            if (string.IsNullOrEmpty(connectionString))
                throw new Exception($"连接字符串获取为空,请检查Repository是否指定了dbStoreKey以及检查配置文件是否存在");

            DbConnection = _dbFactory.CreateConnection();
            DbConnection.ConnectionString = connectionString;
            if (DbConnection.State != ConnectionState.Open)
                DbConnection.Open();
        }

        /// <summary>
        /// 获取Factory
        /// </summary>
        /// <param name="dbType"></param>
        /// <returns></returns>
        private DbProviderFactory GetFactory(DatabaseType dbType)
        {
            switch (dbType)
            {
                case DatabaseType.SqlServer:
                case DatabaseType.GteSqlServer2012:
                    return SqlClientFactory.Instance;
                case DatabaseType.MySql:
                    return MySqlClientFactory.Instance;
                case DatabaseType.PostgreSQL:
                    return Npgsql.NpgsqlFactory.Instance;
                case DatabaseType.SQLite:
#if ASP_NET_CORE
                    AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));
                    return Microsoft.Data.Sqlite.SqliteFactory.Instance;
#else
                    return System.Data.SQLite.SQLiteFactory.Instance;
#endif
            }
            return null;
        }
        #endregion

        #region Public Method
        /// <summary>
        /// 垃圾回收
        /// </summary>
        public void Dispose()
        {
            if (DbConnection == null)
                return;
            try
            {
                DbConnection.Dispose();
            }
            catch { }
        }
        #endregion
    }
}


================================================
FILE: src/Overt.Core.Data/DataContext/DataSettings.cs
================================================
using System;
using System.Text.RegularExpressions;
#if ASP_NET_CORE
using Microsoft.Extensions.Configuration;
#else
using System.Configuration;
#endif

namespace Overt.Core.Data
{
    /// <summary>
    /// 连接配置信息获取
    /// 1. master / secondary
    /// 2. xx.master / xx.secondary
    /// </summary>
    public class DataSettings
    {
        #region Static Private Members
        const string _connNmeOfMaster = "master";
        const string _connNameOfSecondary = "secondary";
        const string _connNameOfPoint = ".";
        #endregion

        #region Single Instance
        static readonly object lockHelper = new object();
        static volatile DataSettings _Default;
        /// <summary>
        /// 单例模式
        /// </summary>
        static public DataSettings Default
        {
            get
            {
                if (_Default == null)
                {
                    lock (lockHelper)
                    {
                        _Default = _Default ?? new DataSettings();
                    }
                }
                return _Default;
            }
        }
        #endregion

        #region Construct Method
        /// <summary>
        /// 构造函数
        /// </summary>
        private DataSettings()
        {
        }
        #endregion

        #region Public Method
#if ASP_NET_CORE
        /// <summary>
        /// 获取连接字符串
        /// </summary>
        /// <param name="configuration"></param>
        /// <param name="isMaster"></param>
        /// <param name="dbStoreKey"></param>
        /// <param name="connectionFunc"></param>
        /// <returns></returns>
        public (string, DatabaseType) Get(IConfiguration configuration, bool isMaster, string dbStoreKey, Func<bool, string> connectionFunc = null)
        {
            string connectionString;
            if (connectionFunc != null)
            {
                connectionString = connectionFunc.Invoke(isMaster);
                return ResolveConnectionString(connectionString);
            }

            if (configuration == null)
            {
                throw new Exception($"请注入IConfiguration");
                //configuration = new ConfigurationBuilder()
                //    .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
                //    .AddJsonFile("appsettings.json")
                //    .Build();
            }

            var connectionKey = GetKey(isMaster, dbStoreKey);
            connectionString = configuration.GetConnectionString(connectionKey);
            if (string.IsNullOrEmpty(connectionString) && !isMaster)
            {
                // 从库转主库
                connectionKey = GetKey(true, dbStoreKey);
                connectionString = configuration.GetConnectionString(connectionKey);
            }

            return ResolveConnectionString(connectionString);
        }

        /// <summary>
        /// 解析
        /// </summary>
        /// <param name="connectionString"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        private (string, DatabaseType) ResolveConnectionString(string connectionString, string param = "DbType")
        {
            var dbTypeRegex = new Regex($@"(^|;){param}=(?<dbtype>[A-Za-z]+)(;|$)");
            var m = dbTypeRegex.Match(connectionString);
            var dbTypeString = m?.Groups["dbtype"].Value;
            DatabaseType dbType;
            var parseResult = Enum.TryParse(dbTypeString, out dbType);
            if (!parseResult)
                dbType = DatabaseType.MySql;

            connectionString = Regex.Replace(connectionString, $@"{param}=([A-Za-z]+)(;|$)", "");
            return (connectionString, dbType);
        }
#else
        /// <summary>
        /// 获取连接字符串
        /// </summary>
        /// <param name="isMaster"></param>
        /// <param name="dbStoreKey"></param>
        /// <param name="connectionFunc"></param>
        /// <returns></returns>
        public ConnectionStringSettings Get(bool isMaster, string dbStoreKey, Func<bool, ConnectionStringSettings> connectionFunc = null)
        {
            if (connectionFunc != null)
                return connectionFunc.Invoke(isMaster);

            var connectionKey = GetKey(isMaster, dbStoreKey);
            var connectionSetting = ConfigurationManager.ConnectionStrings[connectionKey];
            if (string.IsNullOrEmpty(connectionSetting?.ConnectionString) && !isMaster)
            {
                connectionKey = GetKey(true, dbStoreKey);
                connectionSetting = ConfigurationManager.ConnectionStrings[connectionKey];
            }
            return connectionSetting;
        }
#endif
        #endregion

        #region Private Method
        /// <summary>
        /// 获取
        /// </summary>
        /// <param name="isMaster"></param>
        /// <param name="dbStoreKey">不能包含点</param>
        /// <returns></returns>
        private string GetKey(bool isMaster = false, string dbStoreKey = "")
        {
            var connNameOfPrefix = string.IsNullOrWhiteSpace(dbStoreKey) ? "" : $"{dbStoreKey}{_connNameOfPoint}";
            string connName;
            if (isMaster)
                connName = $"{connNameOfPrefix}{_connNmeOfMaster}";
            else
                connName = $"{connNameOfPrefix}{_connNameOfSecondary}";

            return connName;
        }
        #endregion
    }
}


================================================
FILE: src/Overt.Core.Data/Enums/DataCustomType.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Overt.Core.Data
{
    /// <summary>
    /// 自定义字段类型
    /// </summary>
    public enum DataCustomType
    {
        /// <summary>
        /// 未定义
        /// </summary>
        None = 0,
        /// <summary>
        /// jsonb类型
        /// </summary>
        Jsonb = 1,
    }
}


================================================
FILE: src/Overt.Core.Data/Enums/DatabaseType.cs
================================================
namespace Overt.Core.Data
{
    /// <summary>
    /// 数据库类型
    /// </summary>
	public enum DatabaseType
    {
        /// <summary>
        /// SqlServer
        /// </summary>
		SqlServer,
        /// <summary>
        /// >=SqlServer2012
        /// </summary>
		GteSqlServer2012,
        /// <summary>
        /// Mysql
        /// </summary>
		MySql,
        /// <summary>
        /// Sqlite
        /// </summary>
        SQLite,
        /// <summary>
        /// PostgreSQL
        /// </summary>
        PostgreSQL
    }
}

================================================
FILE: src/Overt.Core.Data/Enums/FieldSortType.cs
================================================
namespace Overt.Core.Data
{
    /// <summary>
    /// 字段排序类型
    /// </summary>
    public enum FieldSortType
    {
        /// <summary>
        /// 顺序
        /// </summary>
        Asc = 1,
        /// <summary>
        /// 倒序
        /// </summary>
        Desc = 2
    }
}


================================================
FILE: src/Overt.Core.Data/Expressions/ExpressionHelper.cs
================================================
using System.Collections.Generic;
using System.Linq.Expressions;

namespace Overt.Core.Data.Expressions
{
    /// <summary>
    /// 解析为 Dictionary 获取表达式中的key - value
    /// 只需要有等于号的
    /// </summary>
    internal class ExpressionHelper
    {
        /// <summary>
        /// 获取参数
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="dictionary"></param>
        public static void Resolve(Expression expression, ref Dictionary<object, object> dictionary)
        {
            if (expression == null)
                return;

            if (expression is BinaryExpression)
            {
                var binaryExpression = ((BinaryExpression)expression);
                ResolveBinary(binaryExpression, ref dictionary);
            }
        }

        #region Binary
        private static void ResolveBinary(BinaryExpression expression, ref Dictionary<object, object> dictionary)
        {
            object left = null, right = null;
            if (expression.NodeType == ExpressionType.AndAlso || expression.NodeType == ExpressionType.OrElse)
            {
                if (expression.Left.IsBooleanComparison())
                    left = ResolveMemberOrConstant(expression.Left);
                else
                    Resolve(expression.Left, ref dictionary);

                if (expression.Right.IsBooleanComparison())
                    right = ResolveMemberOrConstant(expression.Right);
                else
                    Resolve(expression.Right, ref dictionary);
            }
            else if (expression.NodeType == ExpressionType.Equal)
            {
                left = ResolveMemberOrConstant(expression.Left);
                right = ResolveMemberOrConstant(expression.Right);
            }

            if (left != null && !dictionary.ContainsKey(left))
            {
                dictionary.Add(left, right);
            }
        }
        #endregion

        #region Member / Constant
        private static object ResolveMemberOrConstant(Expression expression)
        {
            if (expression == null)
                return null;

            if (expression is MemberExpression)
                return ResolveMember((MemberExpression)expression);
            if (expression is ConstantExpression)
                return ResolveConstant((ConstantExpression)expression);
            return null;
        }

        private static object ResolveMember(MemberExpression expression)
        {
            if (expression.Expression != null)
            {
                if (expression.Member.DeclaringType.IsNullableType())
                    return null;

                if (expression.IsParameterOrConvertAccess())
                    return expression.Member.Name;
            }

            var val = SqlExpressionCompiler.Evaluate(expression);
            return val;
        }

        private static object ResolveConstant(ConstantExpression expression)
        {
            return expression.Value;
        }
        #endregion
    }
}


================================================
FILE: src/Overt.Core.Data/Expressions/Extensions/Expression.Extensions.cs
================================================
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;

namespace Overt.Core.Data.Expressions
{
    /// <summary>
    /// 表达式扩展
    /// </summary>
    public static class ExpressionExtensions
    {
        /// <summary>
        /// 是否为空类型
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public static bool IsNullableType(this Type type)
        {
            return type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>);
        }

        /// <summary>
        /// 是否是
        /// </summary>
        /// <param name="type"></param>
        /// <param name="genericTypeDefinition"></param>
        /// <returns></returns>
        public static bool IsOrHasGenericInterfaceTypeOf(this Type type, Type genericTypeDefinition)
        {
            return (type.GetTypeWithGenericTypeDefinitionOf(genericTypeDefinition) != null)
                || (type == genericTypeDefinition);
        }

        /// <summary>
        /// 是否是泛型
        /// </summary>
        /// <param name="type"></param>
        /// <param name="genericTypeDefinition"></param>
        /// <returns></returns>
        public static Type GetTypeWithGenericTypeDefinitionOf(this Type type, Type genericTypeDefinition)
        {
            foreach (var t in type.GetInterfaces())
            {
                if (t.IsGenericType && t.GetGenericTypeDefinition() == genericTypeDefinition)
                {
                    return t;
                }
            }

            var genericType = type.FirstGenericType();
            if (genericType != null && genericType.GetGenericTypeDefinition() == genericTypeDefinition)
            {
                return genericType;
            }

            return null;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public static Type FirstGenericType(this Type type)
        {
            while (type != null)
            {
                if (type.IsGenericType)
                    return type;

                type = type.BaseType;
            }
            return null;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="m"></param>
        /// <returns></returns>
        public static string GetMemberExpression(this MemberExpression m)
        {
            return m.Member.Name;
        }

        /// <summary>
        /// Determines whether the expression is the parameter.
        /// </summary>
        /// <returns>Returns true if the specified expression is parameter;
        /// otherwise, false.</returns>
        public static bool IsParameterAccess(Expression e)
        {
            return e.CheckExpressionForTypes(new[] { ExpressionType.Parameter });
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public static bool IsParameterOrConvertAccess(this Expression e)
        {
            return e.CheckExpressionForTypes(new[] { ExpressionType.Parameter, ExpressionType.Convert });
        }

        /// <summary>
        /// 检查类型
        /// </summary>
        /// <param name="e"></param>
        /// <param name="types"></param>
        /// <returns></returns>
        public static bool CheckExpressionForTypes(this Expression e, ExpressionType[] types)
        {
            while (e != null)
            {
                if (types.Contains(e.NodeType))
                {
                    var subUnaryExpr = e as UnaryExpression;
                    var isSubExprAccess = subUnaryExpr?.Operand is IndexExpression;
                    if (!isSubExprAccess)
                        return true;
                }

                var binaryExpr = e as BinaryExpression;
                if (binaryExpr != null)
                {
                    if (CheckExpressionForTypes(binaryExpr.Left, types))
                        return true;

                    if (CheckExpressionForTypes(binaryExpr.Right, types))
                        return true;
                }

                var methodCallExpr = e as MethodCallExpression;
                if (methodCallExpr != null)
                {
                    for (var i = 0; i < methodCallExpr.Arguments.Count; i++)
                    {
                        if (CheckExpressionForTypes(methodCallExpr.Arguments[i], types))
                            return true;
                    }

                    if (CheckExpressionForTypes(methodCallExpr.Object, types))
                        return true;
                }

                var unaryExpr = e as UnaryExpression;
                if (unaryExpr != null)
                {
                    if (CheckExpressionForTypes(unaryExpr.Operand, types))
                        return true;
                }

                var condExpr = e as ConditionalExpression;
                if (condExpr != null)
                {
                    if (CheckExpressionForTypes(condExpr.Test, types))
                        return true;

                    if (CheckExpressionForTypes(condExpr.IfTrue, types))
                        return true;

                    if (CheckExpressionForTypes(condExpr.IfFalse, types))
                        return true;
                }

                var memberExpr = e as MemberExpression;
                e = memberExpr?.Expression;
            }

            return false;
        }

        /// <summary>
        /// 是否是Boolean
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public static bool IsBooleanComparison(this Expression e)
        {
            if (!(e is MemberExpression))
                return false;

            var m = (MemberExpression)e;

            if (m.Member.DeclaringType.IsNullableType() &&
                m.Member.Name == "HasValue") //nameof(Nullable<bool>.HasValue)
                return false;

            return IsParameterAccess(m);
        }

        /// <summary>
        /// 获取Value
        /// </summary>
        /// <param name="binding"></param>
        /// <returns></returns>
        public static object GetValue(this MemberBinding binding)
        {
            switch (binding.BindingType)
            {
                case MemberBindingType.Assignment:
                    var assign = (MemberAssignment)binding;
                    if (assign.Expression is ConstantExpression constant)
                        return constant.Value;

                    try
                    {
                        return SqlExpressionCompiler.Evaluate(assign.Expression);
                    }
                    catch (Exception ex)
                    {
                        var member = Expression.Convert(assign.Expression, typeof(object));
                        var lambda = Expression.Lambda<Func<object>>(member);
                        var getter = lambda.Compile();
                        return getter();
                    }
            }
            return null;
        }

        /// <summary>
        /// 获取Fields
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="expr"></param>
        /// <returns></returns>
        public static string[] GetFieldNames<T>(this Expression<Func<T, object>> expr)
        {
            if (expr == null)
                return null;

            if (expr.Body is MemberExpression member)
            {
                if (member.Member.DeclaringType.IsAssignableFrom(typeof(T)))
                    return new[] { member.Member.Name };

                var array = SqlExpressionCompiler.Evaluate(member);
                if (array is IEnumerable<string> strEnum)
                    return strEnum.ToArray();
            }

            if (expr.Body is NewExpression newExpr)
                return newExpr.Arguments.OfType<MemberExpression>().Select(x => x.Member.Name).ToArray();

            if (expr.Body is MemberInitExpression init)
                return init.Bindings.Select(x => x.Member.Name).ToArray();

            if (expr.Body is UnaryExpression unary)
            {
                member = unary.Operand as MemberExpression;
                if (member != null)
                    return new[] { member.Member.Name };
            }

            throw new ArgumentException("Invalid Fields List Expression: " + expr);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public static List<object> Flatten(this IEnumerable list)
        {
            var ret = new List<object>();
            if (list == null) return ret;

            foreach (var item in list)
            {
                if (item == null) continue;

                var arr = item as IEnumerable;
                if (arr != null && !(item is string))
                {
                    ret.AddRange(arr.Cast<object>());
                }
                else
                {
                    ret.Add(item);
                }
            }
            return ret;
        }
    }
}


================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/Basic/BaseSqlExpression.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq.Expressions;

namespace Overt.Core.Data.Expressions
{
    /// <summary>
    /// BaseSqlExpression
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public abstract class BaseSqlExpression<T> : ISqlExpression where T : Expression
    {
        /// <summary>
        /// Update
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		protected virtual SqlGenerate Update(T expression, SqlGenerate sqlGenerate)
        {
            throw new NotImplementedException("未实现" + typeof(T).Name + "2Sql.Update方法");
        }

        /// <summary>
        /// Select
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		protected virtual SqlGenerate Select(T expression, SqlGenerate sqlGenerate)
        {
            throw new NotImplementedException("未实现" + typeof(T).Name + "2Sql.Select方法");
        }

        /// <summary>
        /// Where
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		protected virtual SqlGenerate Where(T expression, SqlGenerate sqlGenerate)
        {
            throw new NotImplementedException("未实现" + typeof(T).Name + "2Sql.Where方法");
        }

        /// <summary>
        /// In
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		protected virtual SqlGenerate In(T expression, SqlGenerate sqlGenerate)
        {
            throw new NotImplementedException("未实现" + typeof(T).Name + "2Sql.In方法");
        }

        /// <summary>
        /// OrderBy
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		protected virtual SqlGenerate OrderBy(T expression, SqlGenerate sqlGenerate)
        {
            throw new NotImplementedException("未实现" + typeof(T).Name + "2Sql.OrderBy方法");
        }

        /// <summary>
        /// Max
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		protected virtual SqlGenerate Max(T expression, SqlGenerate sqlGenerate)
        {
            throw new NotImplementedException("未实现" + typeof(T).Name + "2Sql.Max方法");
        }

        /// <summary>
        /// Min
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		protected virtual SqlGenerate Min(T expression, SqlGenerate sqlGenerate)
        {
            throw new NotImplementedException("未实现" + typeof(T).Name + "2Sql.Min方法");
        }

        /// <summary>
        /// Avg
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		protected virtual SqlGenerate Avg(T expression, SqlGenerate sqlGenerate)
        {
            throw new NotImplementedException("未实现" + typeof(T).Name + "2Sql.Avg方法");
        }

        /// <summary>
        /// Count
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		protected virtual SqlGenerate Count(T expression, SqlGenerate sqlGenerate)
        {
            throw new NotImplementedException("未实现" + typeof(T).Name + "2Sql.Count方法");
        }
        /// <summary>
        /// Sum
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		protected virtual SqlGenerate Sum(T expression, SqlGenerate sqlGenerate)
        {
            throw new NotImplementedException("未实现" + typeof(T).Name + "2Sql.Sum方法");
        }

        /// <summary>
        /// Update
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		public SqlGenerate Update(Expression expression, SqlGenerate sqlGenerate)
        {
            return Update((T)expression, sqlGenerate);
        }

        /// <summary>
        /// Select
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		public SqlGenerate Select(Expression expression, SqlGenerate sqlGenerate)
        {
            return Select((T)expression, sqlGenerate);
        }

        /// <summary>
        /// Where
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		public SqlGenerate Where(Expression expression, SqlGenerate sqlGenerate)
        {
            return Where((T)expression, sqlGenerate);
        }

        /// <summary>
        /// In
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		public SqlGenerate In(Expression expression, SqlGenerate sqlGenerate)
        {
            return In((T)expression, sqlGenerate);
        }

        /// <summary>
        /// OrderBy
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		public SqlGenerate OrderBy(Expression expression, SqlGenerate sqlGenerate)
        {
            return OrderBy((T)expression, sqlGenerate);
        }

        /// <summary>
        /// Max
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		public SqlGenerate Max(Expression expression, SqlGenerate sqlGenerate)
        {
            return Max((T)expression, sqlGenerate);
        }

        /// <summary>
        /// Min
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		public SqlGenerate Min(Expression expression, SqlGenerate sqlGenerate)
        {
            return Min((T)expression, sqlGenerate);
        }

        /// <summary>
        /// Avg
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		public SqlGenerate Avg(Expression expression, SqlGenerate sqlGenerate)
        {
            return Avg((T)expression, sqlGenerate);
        }

        /// <summary>
        /// Count
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		public SqlGenerate Count(Expression expression, SqlGenerate sqlGenerate)
        {
            return Count((T)expression, sqlGenerate);
        }

        /// <summary>
        /// Sum
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		public SqlGenerate Sum(Expression expression, SqlGenerate sqlGenerate)
        {
            return Sum((T)expression, sqlGenerate);
        }

        #region Internal Method
        /// <summary>
        /// 是否是静态集合方法
        /// </summary>
        /// <param name="m"></param>
        /// <returns></returns>
        internal static bool IsStaticArrayMethod(MethodCallExpression m)
        {
            return (m.Object == null
                && m.Arguments.Count == 2);
        }

        /// <summary>
        /// 是否是集合方法
        /// </summary>
        /// <param name="m"></param>
        /// <returns></returns>
        internal static bool IsEnumerableMethod(MethodCallExpression m)
        {
            return m.Object != null
                && m.Object.Type.IsOrHasGenericInterfaceTypeOf(typeof(IEnumerable<>))
                && m.Object.Type != typeof(string)
                && m.Arguments.Count == 1;
        }
        #endregion
    }
}


================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/Basic/ISqlExpression.cs
================================================
using System.Linq.Expressions;

namespace Overt.Core.Data.Expressions
{
    /// <summary>
    /// interface
    /// </summary>
    public interface ISqlExpression
    {
        /// <summary>
        /// Update
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		SqlGenerate Update(Expression expression, SqlGenerate sqlGenerate);
        /// <summary>
        /// Select
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		SqlGenerate Select(Expression expression, SqlGenerate sqlGenerate);
        /// <summary>
        /// Where
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		SqlGenerate Where(Expression expression, SqlGenerate sqlGenerate);
        /// <summary>
        /// In
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		SqlGenerate In(Expression expression, SqlGenerate sqlGenerate);
        /// <summary>
        /// OrderBy
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		SqlGenerate OrderBy(Expression expression, SqlGenerate sqlGenerate);
        /// <summary>
        /// Max
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		SqlGenerate Max(Expression expression, SqlGenerate sqlGenerate);
        /// <summary>
        /// Min
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		SqlGenerate Min(Expression expression, SqlGenerate sqlGenerate);
        /// <summary>
        /// Avg
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		SqlGenerate Avg(Expression expression, SqlGenerate sqlGenerate);
        /// <summary>
        /// Count
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		SqlGenerate Count(Expression expression, SqlGenerate sqlGenerate);
        /// <summary>
        /// Sum
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="sqlGenerate"></param>
        /// <returns></returns>
		SqlGenerate Sum(Expression expression, SqlGenerate sqlGenerate);
    }
}


================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/BinarySqlExpression.cs
================================================
using System;
using System.Linq.Expressions;

namespace Overt.Core.Data.Expressions
{
    class BinarySqlExpression : BaseSqlExpression<BinaryExpression>
    {
        private void OperatorParser(ExpressionType expressionNodeType, int operatorIndex, SqlGenerate sqlGenerate, bool useIs = false)
        {
            switch (expressionNodeType)
            {
                case ExpressionType.And:
                    sqlGenerate.Sql.Insert(operatorIndex, " & ");
                    break;
                case ExpressionType.AndAlso:
                    sqlGenerate.Sql.Insert(operatorIndex, " and ");
                    break;
                case ExpressionType.Equal:
                    if (useIs)
                        sqlGenerate.Sql.Insert(operatorIndex, " is ");
                    else
                        sqlGenerate.Sql.Insert(operatorIndex, " = ");
                    break;
                case ExpressionType.GreaterThan:
                    sqlGenerate.Sql.Insert(operatorIndex, " >");
                    break;
                case ExpressionType.GreaterThanOrEqual:
                    sqlGenerate.Sql.Insert(operatorIndex, " >=");
                    break;
                case ExpressionType.NotEqual:
                    if (useIs)
                        sqlGenerate.Sql.Insert(operatorIndex, " is not ");
                    else
                        sqlGenerate.Sql.Insert(operatorIndex, " <> ");
                    break;
                case ExpressionType.Or:
                    sqlGenerate.Sql.Insert(operatorIndex, " | ");
                    break;
                case ExpressionType.OrElse:
                    sqlGenerate.Sql.Insert(operatorIndex, " or ");
                    break;
                case ExpressionType.LessThan:
                    sqlGenerate.Sql.Insert(operatorIndex, " < ");
                    break;
                case ExpressionType.LessThanOrEqual:
                    sqlGenerate.Sql.Insert(operatorIndex, " <= ");
                    break;
                default:
                    throw new NotImplementedException("未实现的节点类型" + expressionNodeType);
            }
        }

        protected override SqlGenerate Where(BinaryExpression expression, SqlGenerate sqlGenerate)
        {
            int leftBracketIndex = -1, rightBracketIndex = -1, signIndex = -1, sqlLength = -1;

            leftBracketIndex = sqlGenerate.Length;

            #region 内部内容
            if (expression.NodeType == ExpressionType.AndAlso || expression.NodeType == ExpressionType.OrElse)
            {
                if (expression.Left.IsBooleanComparison())
                {
                    SqlExpressionProvider.Where(expression.Left, sqlGenerate);
                    sqlGenerate += $" = 1";
                }
                else
                {
                    SqlExpressionProvider.Where(expression.Left, sqlGenerate);
                }
                signIndex = sqlGenerate.Length;


                if (expression.Right.IsBooleanComparison())
                {
                    SqlExpressionProvider.Where(expression.Right, sqlGenerate);
                    sqlGenerate += $" = 1";
                }
                else
                {
                    SqlExpressionProvider.Where(expression.Right, sqlGenerate);
                }
                sqlLength = sqlGenerate.Length;
            }
            else
            {
                SqlExpressionProvider.Where(expression.Left, sqlGenerate);
                signIndex = sqlGenerate.Length;

                SqlExpressionProvider.Where(expression.Right, sqlGenerate);
                sqlLength = sqlGenerate.Length;
            }

            if (sqlLength - signIndex == 5 && sqlGenerate.ToString().EndsWith("null"))
                OperatorParser(expression.NodeType, signIndex, sqlGenerate, true);
            else
                OperatorParser(expression.NodeType, signIndex, sqlGenerate);
            #endregion

            if (expression.NodeType == ExpressionType.OrElse || expression.NodeType == ExpressionType.AndAlso ||
                expression.NodeType == ExpressionType.Or || expression.NodeType == ExpressionType.And)
            {
                sqlGenerate.Sql.Insert(leftBracketIndex, " ( ");
                rightBracketIndex = sqlGenerate.Length;
                sqlGenerate.Sql.Insert(rightBracketIndex, " ) ");
            }

            return sqlGenerate;
        }
    }
}

================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/ConstantSqlExpression.cs
================================================
using System.Collections.Generic;
using System.Linq.Expressions;

namespace Overt.Core.Data.Expressions
{
    class ConstantSqlExpression : BaseSqlExpression<ConstantExpression>
    {
        protected override SqlGenerate Where(ConstantExpression expression, SqlGenerate sqlGenerate)
        {
            sqlGenerate.AddDbParameter(expression.Value);
            return sqlGenerate;
        }

        protected override SqlGenerate In(ConstantExpression expression, SqlGenerate sqlGenerate)
        {
            sqlGenerate.AddDbParameter(expression.Value);
            sqlGenerate += ",";
            return sqlGenerate;
        }

        protected override SqlGenerate Select(ConstantExpression expression, SqlGenerate sqlGenerate)
        {
            if (expression.Value == null)
                sqlGenerate.SelectFields = new List<string>() { "*" };
            else
                sqlGenerate.SelectFields = new List<string>() { expression.Value.ToString() };
            return sqlGenerate;
        }
    }
}

================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/LambdaSqlExpression.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text;

namespace Overt.Core.Data.Expressions
{
    public class LambdaSqlExpression : BaseSqlExpression<LambdaExpression>
    {
        protected override SqlGenerate Update(LambdaExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Update(expression.Body, sqlGenerate);
            return sqlGenerate;
        }
        protected override SqlGenerate Select(LambdaExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Select(expression.Body, sqlGenerate);
            return sqlGenerate;
        }
        protected override SqlGenerate Where(LambdaExpression expression, SqlGenerate sqlGenerate)
        {
            if (expression.Body.NodeType == ExpressionType.MemberAccess)
            {
                var memberExpression = expression.Body as MemberExpression;
                if (memberExpression.Expression == null)
                    return sqlGenerate;

                //添加属性
                SqlExpressionProvider.Where(memberExpression, sqlGenerate);

                if (memberExpression.Expression.Type.IsNullableType())
                    return sqlGenerate;

                sqlGenerate += " = 1";
                return sqlGenerate;
            }

            SqlExpressionProvider.Where(expression.Body, sqlGenerate);
            return sqlGenerate;
        }
        protected override SqlGenerate In(LambdaExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.In(expression.Body, sqlGenerate);
            return sqlGenerate;
        }
        protected override SqlGenerate OrderBy(LambdaExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.OrderBy(expression.Body, sqlGenerate);
            return sqlGenerate;
        }
        protected override SqlGenerate Max(LambdaExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Max(expression.Body, sqlGenerate);
            return sqlGenerate;
        }
        protected override SqlGenerate Min(LambdaExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Min(expression.Body, sqlGenerate);
            return sqlGenerate;
        }
        protected override SqlGenerate Avg(LambdaExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Avg(expression.Body, sqlGenerate);
            return sqlGenerate;
        }
        protected override SqlGenerate Count(LambdaExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Count(expression.Body, sqlGenerate);
            return sqlGenerate;
        }
        protected override SqlGenerate Sum(LambdaExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Sum(expression.Body, sqlGenerate);
            return sqlGenerate;
        }
    }
}


================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/ListInitSqlExpression.cs
================================================
using System.Collections.Generic;
using System.Linq.Expressions;

namespace Overt.Core.Data.Expressions
{
    class ListInitSqlExpression : BaseSqlExpression<ListInitExpression>
    {
        protected override SqlGenerate In(ListInitExpression expression, SqlGenerate sqlGenerate)
        {
            var list = new List<object>();
            foreach (var elementInit in expression.Initializers)
            {
                foreach (var expre in elementInit.Arguments)
                {
                    var obj = SqlExpressionCompiler.Evaluate(expre);
                    list.Add(obj);
                }
            }
            sqlGenerate.AddDbParameter(list);
            return sqlGenerate;
        }

        protected override SqlGenerate Select(ListInitExpression expression, SqlGenerate sqlGenerate)
        {
            foreach (var elementInit in expression.Initializers)
            {
                foreach (var expre in elementInit.Arguments)
                {
                    var obj = SqlExpressionCompiler.Evaluate(expre);
                    if (obj == null)
                        continue;

                    var fieldName = obj.ToString();
                    if (string.IsNullOrEmpty(fieldName))
                        continue;
                    sqlGenerate.SelectFields.Add(fieldName.ParamSql(sqlGenerate));
                }
            }
            return sqlGenerate;
        }
    }
}


================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/MemberSqlExpression.cs
================================================
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;

namespace Overt.Core.Data.Expressions
{
    class MemberSqlExpression : BaseSqlExpression<MemberExpression>
    {
        protected override SqlGenerate Select(MemberExpression expression, SqlGenerate sqlGenerate)
        {
            if (IsEnumerable(expression))
            {
                var result = SqlExpressionCompiler.Evaluate(expression);
                var fields = (result as IEnumerable).Flatten();
                if (fields?.Count > 0)
                    sqlGenerate.SelectFields.AddRange(fields.Select(field => field.ToString().ParamSql(sqlGenerate)));
                else
                    sqlGenerate.SelectFields = new List<string>() { "*" };

                return sqlGenerate;
            }

            sqlGenerate.SelectFields.Add(expression.Member.Name.ParamSql(sqlGenerate));
            return sqlGenerate;
        }

        protected override SqlGenerate Where(MemberExpression expression, SqlGenerate sqlGenerate)
        {
            if (expression.Expression != null)
            {
                if (expression.Member.DeclaringType.IsNullableType())
                {
                    if (expression.Member.Name == "Value") //Can't use C# 6 yet: nameof(Nullable<bool>.Value)
                    {
                        SqlExpressionProvider.Where(expression.Expression, sqlGenerate);
                        return sqlGenerate;
                    }
                    if (expression.Member.Name == "HasValue")
                    {
                        var doesNotEqualNull = Expression.MakeBinary(ExpressionType.NotEqual, expression.Expression, Expression.Constant(null));
                        SqlExpressionProvider.Where(doesNotEqualNull, sqlGenerate);
                        return sqlGenerate;
                    }
                    throw new ArgumentException($"Expression '{expression}' accesses unsupported property '{expression.Member}' of Nullable<T>");
                }

                if (expression.IsParameterOrConvertAccess())
                {
                    sqlGenerate += $" {expression.Member.Name.ParamSql(sqlGenerate)}";
                    return sqlGenerate;
                }
            }

            var val = SqlExpressionCompiler.Evaluate(expression);
            sqlGenerate.AddDbParameter(val);
            return sqlGenerate;

        }

        protected override SqlGenerate In(MemberExpression expression, SqlGenerate sqlGenerate)
        {
            var result = SqlExpressionCompiler.Evaluate(expression);
            var inArgs = (result as IEnumerable).Flatten();
            if (sqlGenerate.DatabaseType == DatabaseType.PostgreSQL)  // pg的in查询需要手动拼接,不然npgsql客户不支持list类型参数化
                sqlGenerate.CombineInParameters(inArgs);
            else
                sqlGenerate.AddDbParameter(inArgs);
            return sqlGenerate;
        }

        protected override SqlGenerate OrderBy(MemberExpression expression, SqlGenerate sqlGenerate)
        {
            sqlGenerate += expression.Member.Name.ParamSql(sqlGenerate);
            return sqlGenerate;
        }

        protected override SqlGenerate Update(MemberExpression expression, SqlGenerate sqlGenerate)
        {
            var obj = SqlExpressionCompiler.Evaluate(expression);
            if (obj == null)
                throw new ArgumentException($"Expression '{expression}' accesses unsupported property '{expression.Member}' of Nullable<T>");

            if (obj.GetType().IsValueType)
                throw new ArgumentException($"Expression '{expression}' accesses unsupported valuetype");

            if (obj.GetType() == typeof(string))
            {
                sqlGenerate += obj.ToString();
            }
            else if (obj is IDictionary dictionary)
            {
                foreach (string key in dictionary.Keys)
                {
                    sqlGenerate += $"{key.ParamSql(sqlGenerate)} = ";
                    sqlGenerate.AddDbParameter(dictionary[key]);
                    sqlGenerate += ",";
                }
            }
            else
            {
                var pis = obj.GetType().GetProperties();
                foreach (var p in pis)
                {
                    sqlGenerate += $"{p.Name.ParamSql(sqlGenerate)} = ";
                    sqlGenerate.AddDbParameter(p.GetValue(obj));
                    sqlGenerate += ",";
                }
            }

            if (sqlGenerate[sqlGenerate.Length - 1] == ',')
                sqlGenerate.Sql.Remove(sqlGenerate.Length - 1, 1);

            return sqlGenerate;
        }

        protected override SqlGenerate Max(MemberExpression expression, SqlGenerate sqlGenerate)
        {
            sqlGenerate.Sql.AppendFormat("select max({0}) from {1}", expression.Member.Name.ParamSql(sqlGenerate), sqlGenerate.TableName);
            return sqlGenerate;
        }

        protected override SqlGenerate Min(MemberExpression expression, SqlGenerate sqlGenerate)
        {
            sqlGenerate.Sql.AppendFormat("select min({0}) from {1}", expression.Member.Name.ParamSql(sqlGenerate), sqlGenerate.TableName);
            return sqlGenerate;
        }

        protected override SqlGenerate Avg(MemberExpression expression, SqlGenerate sqlGenerate)
        {
            sqlGenerate.Sql.AppendFormat("select avg({0}) from {1}", expression.Member.Name.ParamSql(sqlGenerate), sqlGenerate.TableName);
            return sqlGenerate;
        }

        protected override SqlGenerate Count(MemberExpression expression, SqlGenerate sqlGenerate)
        {
            sqlGenerate.Sql.AppendFormat("select count({0}) from {1}", expression.Member.Name.ParamSql(sqlGenerate), sqlGenerate.TableName);
            return sqlGenerate;
        }

        protected override SqlGenerate Sum(MemberExpression expression, SqlGenerate sqlGenerate)
        {
            sqlGenerate.Sql.AppendFormat("select sum({0}) from {1}", expression.Member.Name.ParamSql(sqlGenerate), sqlGenerate.TableName);
            return sqlGenerate;
        }

        /// <summary>
        /// 是否是集合方法
        /// </summary>
        /// <param name="m"></param>
        /// <returns></returns>
        internal static bool IsEnumerable(MemberExpression m)
        {
            return m.Type.IsOrHasGenericInterfaceTypeOf(typeof(IEnumerable<>))
                && m.Type != typeof(string);
        }
    }
}

================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/MethodCallSqlExpression.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq.Expressions;

namespace Overt.Core.Data.Expressions
{
    class MethodCallSqlExpression : BaseSqlExpression<MethodCallExpression>
    {
        static Dictionary<string, Action<MethodCallExpression, SqlGenerate>> _Methods = new Dictionary<string, Action<MethodCallExpression, SqlGenerate>>
        {
            {"In", In},
            {"Equals", Equals},
            {"Contains", Contains},
            {"StartsWith", StartsWith},
            {"EndsWith", EndsWith},
            {"Format", Format}
        };

        private static new void In(MethodCallExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Where(expression.Arguments[0], sqlGenerate);
            sqlGenerate += " in ";
            SqlExpressionProvider.In(expression.Arguments[1], sqlGenerate);
        }

        private static void Equals(MethodCallExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Where(expression.Object, sqlGenerate);
            sqlGenerate += " = ";
            SqlExpressionProvider.Where(expression.Arguments[0], sqlGenerate);
        }

        private static void Contains(MethodCallExpression expression, SqlGenerate sqlGenerate)
        {
            if (IsStaticArrayMethod(expression))
            {
                DoStaticArrayMethodCall(expression, sqlGenerate);
                return;
            }
            if (IsEnumerableMethod(expression))
            {
                DoEnumerableMethodCall(expression, sqlGenerate);
                return;
            }

            SqlExpressionProvider.Where(expression.Object, sqlGenerate);
            sqlGenerate += " like ";
            var val = SqlExpressionCompiler.Evaluate(expression.Arguments[0]);
            sqlGenerate.AddDbParameter($"%{val}%");
        }

        private static void EndsWith(MethodCallExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Where(expression.Object, sqlGenerate);
            //SqlExpressionProvider.Where(expression.Arguments[0], sqlGenerate);
            sqlGenerate += " like ";

            var val = SqlExpressionCompiler.Evaluate(expression.Arguments[0]);
            sqlGenerate.AddDbParameter($"%{val}");
        }

        private static void StartsWith(MethodCallExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Where(expression.Object, sqlGenerate);
            //SqlExpressionProvider.Where(expression.Arguments[0], sqlGenerate);
            sqlGenerate += " like ";

            var val = SqlExpressionCompiler.Evaluate(expression.Arguments[0]);
            sqlGenerate.AddDbParameter($"{val}%");
        }

        private static void Format(MethodCallExpression expression, SqlGenerate sqlGenerate)
        {
            var formatString = SqlExpressionCompiler.Evaluate(expression.Arguments[0]);
            var formatArgs = new List<string>();
            var args = expression.Arguments;
            if (args.Count > 1)
            {
                for (int i = 1; i < args.Count; i++)
                {
                    var val = SqlExpressionCompiler.Evaluate(expression.Arguments[i]);
                    formatArgs.Add(val?.ToString());
                }
            }
            sqlGenerate += string.Format(formatString.ToString(), formatArgs.ToArray());
        }

        protected override SqlGenerate Where(MethodCallExpression expression, SqlGenerate sqlGenerate)
        {
            var key = expression.Method;
            if (key.IsGenericMethod)
                key = key.GetGenericMethodDefinition();

            Action<MethodCallExpression, SqlGenerate> action;
            if (_Methods.TryGetValue(key.Name, out action))
            {
                action(expression, sqlGenerate);
                return sqlGenerate;
            }

            throw new NotImplementedException("无法解析方法" + expression.Method);
        }

        protected override SqlGenerate Update(MethodCallExpression expression, SqlGenerate sqlGenerate)
        {
            var key = expression.Method;
            if (key.IsGenericMethod)
                key = key.GetGenericMethodDefinition();

            Action<MethodCallExpression, SqlGenerate> action;
            if (_Methods.TryGetValue(key.Name, out action))
            {
                action(expression, sqlGenerate);
                return sqlGenerate;
            }

            throw new NotImplementedException("无法解析方法" + expression.Method);
        }


        #region Internal Method

        internal static void DoEnumerableMethodCall(MethodCallExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Where(expression.Arguments[0], sqlGenerate);
            sqlGenerate += " in ";
            SqlExpressionProvider.In(expression.Object, sqlGenerate);
        }

        internal static void DoStaticArrayMethodCall(MethodCallExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Where(expression.Arguments[expression.Arguments.Count - 1], sqlGenerate);
            sqlGenerate += " in ";

            var memberExpr = expression.Arguments[0];
            if (memberExpr.NodeType == ExpressionType.MemberAccess)
                memberExpr = expression.Arguments[0] as MemberExpression;

            SqlExpressionProvider.In(memberExpr, sqlGenerate);
        }

        #endregion
    }
}


================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/NewArraySqlExpression.cs
================================================
using System.Collections.Generic;
using System.Linq.Expressions;

namespace Overt.Core.Data.Expressions
{
    class NewArraySqlExpression : BaseSqlExpression<NewArrayExpression>
    {
        protected override SqlGenerate In(NewArrayExpression expression, SqlGenerate sqlGenerate)
        {
            var list = new List<object>();
            foreach (var expressionItem in expression.Expressions)
            {
                var obj = SqlExpressionCompiler.Evaluate(expressionItem);
                list.Add(obj);
            }
            sqlGenerate.AddDbParameter(list);
            return sqlGenerate;
        }
    }
}


================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/NewSqlExpression.cs
================================================
using System.Linq.Expressions;
using System.Reflection;

namespace Overt.Core.Data.Expressions
{
    class NewSqlExpression : BaseSqlExpression<NewExpression>
    {
        protected override SqlGenerate Update(NewExpression expression, SqlGenerate sqlGenerate)
        {
            for (int i = 0; i < expression.Members.Count; i++)
            {
                var m = expression.Members[i];
                sqlGenerate += $"{m.Name.ParamSql(sqlGenerate)} = ";

                var val = SqlExpressionCompiler.Evaluate(expression.Arguments[i]);
                sqlGenerate.AddDbParameter(val);
                sqlGenerate += ",";
            }
            if (sqlGenerate[sqlGenerate.Length - 1] == ',')
                sqlGenerate.Sql.Remove(sqlGenerate.Length - 1, 1);
            
            return sqlGenerate;
        }

        protected override SqlGenerate Select(NewExpression expression, SqlGenerate sqlGenerate)
        {
            foreach (Expression item in expression.Arguments)
            {
                SqlExpressionProvider.Select(item, sqlGenerate);
            }
            return sqlGenerate;
        }

        protected override SqlGenerate OrderBy(NewExpression expression, SqlGenerate sqlGenerate)
        {
            foreach (Expression item in expression.Arguments)
            {
                SqlExpressionProvider.OrderBy(item, sqlGenerate);
                sqlGenerate += ",";
            }
            if (sqlGenerate[sqlGenerate.Length - 1] == ',')
                sqlGenerate.Sql.Remove(sqlGenerate.Length - 1, 1);

            return sqlGenerate;
        }
    }
}


================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/UnarySqlExpression.cs
================================================
using System.Linq.Expressions;

namespace Overt.Core.Data.Expressions
{
    class UnarySqlExpression : BaseSqlExpression<UnaryExpression>
    {
        protected override SqlGenerate Select(UnaryExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Select(expression.Operand, sqlGenerate);
            return sqlGenerate;
        }

        protected override SqlGenerate Where(UnaryExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Where(expression.Operand, sqlGenerate);
            switch (expression.NodeType)
            {
                case ExpressionType.Not:
                    if (expression.Operand is MethodCallExpression)
                    {
                        if (IsStaticArrayMethod(expression.Operand as MethodCallExpression) ||
                            IsEnumerableMethod(expression.Operand as MethodCallExpression))
                        {
                            sqlGenerate.RelaceLast("in", "not in");
                        }
                        else
                        {
                            sqlGenerate.RelaceLast("like", "not like");
                        }
                    }
                    else
                        sqlGenerate += " = 0";
                    break;
            }

            return sqlGenerate;
        }

        protected override SqlGenerate OrderBy(UnaryExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.OrderBy(expression.Operand, sqlGenerate);
            return sqlGenerate;
        }

        protected override SqlGenerate Max(UnaryExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Max(expression.Operand, sqlGenerate);
            return sqlGenerate;
        }

        protected override SqlGenerate Min(UnaryExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Min(expression.Operand, sqlGenerate);
            return sqlGenerate;
        }

        protected override SqlGenerate Avg(UnaryExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Avg(expression.Operand, sqlGenerate);
            return sqlGenerate;
        }

        protected override SqlGenerate Count(UnaryExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Count(expression.Operand, sqlGenerate);
            return sqlGenerate;
        }

        protected override SqlGenerate Sum(UnaryExpression expression, SqlGenerate sqlGenerate)
        {
            SqlExpressionProvider.Sum(expression.Operand, sqlGenerate);
            return sqlGenerate;
        }
    }
}


================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/SqlExpression.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq.Expressions;

namespace Overt.Core.Data.Expressions
{
    /// <summary>
    /// Expression => Sql 
    /// </summary>
    public static class SqlExpression
    {
        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dbType"></param>
        /// <param name="tableName"></param>
        /// <param name="returnLastIdentity"></param>
        /// <returns></returns>
        public static SqlExpressionCore<T> Insert<T>(DatabaseType dbType, string tableName = "", bool returnLastIdentity = false)
        {
            return new SqlExpressionCore<T>(dbType, tableName).Insert(returnLastIdentity);
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dbType">数据库类型</param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static SqlExpressionCore<T> Delete<T>(DatabaseType dbType, string tableName = "")
        {
            return new SqlExpressionCore<T>(dbType, tableName).Delete();
        }

        /// <summary>
        /// 修改
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dbType">数据库类型</param>
        /// <param name="expression"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static SqlExpressionCore<T> Update<T>(DatabaseType dbType, Expression<Func<object>> expression = null, string tableName = "")
        {
            return new SqlExpressionCore<T>(dbType, tableName).Update(expression);
        }

        /// <summary>
        /// 修改
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dbType">数据库类型</param>
        /// <param name="fields"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static SqlExpressionCore<T> Update<T>(DatabaseType dbType, IEnumerable<string> fields = null, string tableName = "")
        {
            return new SqlExpressionCore<T>(dbType, tableName).Update(fields);
        }

        /// <summary>
        /// 查询
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dbType">数据库类型</param>
        /// <param name="expression"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static SqlExpressionCore<T> Select<T>(DatabaseType dbType, Expression<Func<T, object>> expression = null, string tableName = "")
        {
            return new SqlExpressionCore<T>(dbType, tableName).Select(expression);
        }

        /// <summary>
        /// 数量
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dbType">数据库类型</param>
        /// <param name="expression"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static SqlExpressionCore<T> Count<T>(DatabaseType dbType, Expression<Func<T, object>> expression = null, string tableName = "")
        {
            return new SqlExpressionCore<T>(dbType, tableName).Count(expression);
        }

        /// <summary>
        /// 最大
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dbType">数据库类型</param>
        /// <param name="expression"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static SqlExpressionCore<T> Max<T>(DatabaseType dbType, Expression<Func<T, object>> expression, string tableName = "")
        {
            return new SqlExpressionCore<T>(dbType, tableName).Max(expression);
        }

        /// <summary>
        /// 最小
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dbType">数据库类型</param>
        /// <param name="expression"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static SqlExpressionCore<T> Min<T>(DatabaseType dbType, Expression<Func<T, object>> expression, string tableName = "")
        {
            return new SqlExpressionCore<T>(dbType, tableName).Min(expression);
        }

        /// <summary>
        /// 平均值
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dbType">数据库类型</param>
        /// <param name="expression"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static SqlExpressionCore<T> Avg<T>(DatabaseType dbType, Expression<Func<T, object>> expression, string tableName = "")
        {
            return new SqlExpressionCore<T>(dbType, tableName).Avg(expression);
        }

        /// <summary>
        /// 求和
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dbType">数据库类型</param>
        /// <param name="expression"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static SqlExpressionCore<T> Sum<T>(DatabaseType dbType, Expression<Func<T, object>> expression, string tableName = "")
        {
            return new SqlExpressionCore<T>(dbType, tableName).Sum(expression);
        }
    }
}


================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/SqlExpressionCompiler.cs
================================================
using System;
using System.Linq.Expressions;
using static Overt.Core.Data.Expressions.SqlExpressionFingerprint;

namespace Overt.Core.Data.Expressions
{
    /// <summary>
    /// 参数编译器 
    /// base ServiceStack
    /// </summary>
    public static class SqlExpressionCompiler
    {
        private static readonly ParameterExpression _unusedParameterExpr = Expression.Parameter(typeof(object), "_unused");

        /// <summary>
        /// 编译
        /// </summary>
        /// <typeparam name="TModel"></typeparam>
        /// <typeparam name="TValue"></typeparam>
        /// <param name="lambdaExpression"></param>
        /// <returns></returns>
        public static Func<TModel, TValue> Compile<TModel, TValue>(this Expression<Func<TModel, TValue>> lambdaExpression)
        {
            if (lambdaExpression == null)
                throw new ArgumentNullException(nameof(lambdaExpression));

            return ExpressionCompiler.Process(lambdaExpression);
        }
        /// <summary>
        /// 编译
        /// </summary>
        /// <param name="arg"></param>
        /// <returns></returns>
        public static object Evaluate(Expression arg)
        {
            if (arg == null)
                throw new ArgumentNullException(nameof(arg));

            var func = Wrap(arg);
            return func(null);
        }

        private static Func<object, object> Wrap(Expression arg)
        {
            var lambdaExpr = Expression.Lambda<Func<object, object>>(Expression.Convert(arg, typeof(object)), _unusedParameterExpr);
            return ExpressionCompiler.Process(lambdaExpr);
        }
    }
}

================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/SqlExpressionCore.cs
================================================
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Linq.Expressions;
using System.Text;

namespace Overt.Core.Data.Expressions
{
    /// <summary>
    /// Expression核心
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class SqlExpressionCore<T>
    {
        private SqlGenerate sqlGenerate = new SqlGenerate();
        /// <summary>
        /// 脚本
        /// </summary>
		public string Script { get { return sqlGenerate.ToString(); } }
        /// <summary>
        /// 参数
        /// </summary>
        public Dictionary<string, object> DbParams { get { return sqlGenerate.DbParams; } }

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="dbType"></param>
        /// <param name="tableName"></param>
        public SqlExpressionCore(DatabaseType dbType, string tableName = "")
        {
            if (string.IsNullOrEmpty(tableName))
                tableName = typeof(T).Name;

            sqlGenerate.DatabaseType = dbType;
            sqlGenerate.TableName = tableName.ParamSql(dbType);
        }

        /// <summary>
        /// 清除
        /// </summary>
        public void Clear()
        {
            sqlGenerate.Clear();
        }

        /// <summary>
        /// 新增
        /// </summary>
        /// <param name="returnLastIdentity"></param>
        /// <returns></returns>
        public SqlExpressionCore<T> Insert(bool returnLastIdentity)
        {
            var addFields = new List<string>();
            var atFields = new List<string>();

            var identityPi = typeof(T).GetIdentityField();
            var customPis = typeof(T).GetCustomFields();
            var pis = typeof(T).GetProperties();
            foreach (var pi in pis)
            {
                if (identityPi?.Name == pi.Name)
                    continue;

                addFields.Add($"{pi.Name.ParamSql(sqlGenerate.DatabaseType)}");
                atFields.Add($"{pi.Name.ParamValue(sqlGenerate.DatabaseType, customPis)}");
            }

            sqlGenerate.Clear();
            sqlGenerate += $"insert into {sqlGenerate.TableName}({string.Join(", ", addFields)}) values({string.Join(", ", atFields)});";
            if (identityPi != null && returnLastIdentity)
                sqlGenerate += sqlGenerate.DatabaseType.SelectLastIdentity();

            return this;
        }

        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="expression"></param>
        /// <param name="orderBy">排序字段</param>
        /// <returns></returns>
        public SqlExpressionCore<T> Select(Expression<Func<T, object>> expression = null, string orderBy = "")
        {
            var sql = $"select {{0}}{Environment.NewLine}from {sqlGenerate.TableName}";
            var fields = string.Empty;

            if (expression == null)
                fields = "*";
            else
            {
                SqlExpressionProvider.Select(expression, sqlGenerate);
                fields = sqlGenerate.SelectFieldsStr;
            }

            sqlGenerate.Sql.AppendFormat(sql, fields);
            return this;
        }

        /// <summary>
        /// Where条件
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        public SqlExpressionCore<T> Where(Expression<Func<T, bool>> expression)
        {
            if (expression == null)
                return this;

            sqlGenerate += $"{Environment.NewLine}where";
            SqlExpressionProvider.Where(expression, sqlGenerate);
            return this;
        }

        /// <summary>
        /// OrderBy
        /// </summary>
        /// <param name="orderBy"></param>
        /// <returns></returns>
        public SqlExpressionCore<T> OrderBy(string orderBy)
        {
            if (string.IsNullOrEmpty(orderBy))
            {
                var property = typeof(T).GetProperty<KeyAttribute>();
                if (property == null)
                    property = typeof(T).GetProperties()[0];

                var propertyName = property.Name;
                if (sqlGenerate.DatabaseType == DatabaseType.PostgreSQL)
                    propertyName = $"\"{propertyName}\"";
                orderBy = $"order by {propertyName} desc";
            }

            if (!orderBy.StartsWith("order by"))
                orderBy = $"order by {orderBy}";

            switch (sqlGenerate.DatabaseType)
            {
                case DatabaseType.SqlServer: // 2012版本支持 内部数据库版本706 【select DATABASEPROPERTYEX('master','version')】
                    sqlGenerate.Sql.Replace("select", $"select row_number() over({orderBy}) as RowNumber,");
                    break;
                case DatabaseType.GteSqlServer2012:
                    sqlGenerate += $"{Environment.NewLine}{orderBy}";
                    break;
                case DatabaseType.MySql:
                    sqlGenerate += $"{Environment.NewLine}{orderBy}";
                    break;
                case DatabaseType.SQLite:
                    sqlGenerate += $"{Environment.NewLine}{orderBy}";
                    break;
                case DatabaseType.PostgreSQL:
                    sqlGenerate += $"{Environment.NewLine}{orderBy}";
                    break;
            }
            return this;
        }

        /// <summary>
        /// Top1
        /// </summary>
        /// <returns></returns>
        public SqlExpressionCore<T> TopOne()
        {
            switch (sqlGenerate.DatabaseType)
            {
                case DatabaseType.SqlServer: // 2012版本支持 内部数据库版本706 【select DATABASEPROPERTYEX('master','version')】
                    sqlGenerate.Sql.Replace("select", $"select top 1{Environment.NewLine}");
                    break;
                case DatabaseType.GteSqlServer2012:
                    sqlGenerate.Sql.Replace("select", $"select top 1{Environment.NewLine}");
                    break;
                case DatabaseType.MySql:
                    sqlGenerate += $"{Environment.NewLine}limit 1";
                    break;
                case DatabaseType.SQLite:
                    sqlGenerate += $"{Environment.NewLine}limit 1";
                    break;
                case DatabaseType.PostgreSQL:
                    sqlGenerate += $"{Environment.NewLine}limit 1";
                    break;
            }
            return this;
        }

        /// <summary>
        /// Limit
        /// </summary>
        /// <param name="page"></param>
        /// <param name="rows"></param>
        /// <returns></returns>
        public SqlExpressionCore<T> Limit(int page, int rows)
        {
            var skip = (page - 1) * rows;
            switch (sqlGenerate.DatabaseType)
            {
                case DatabaseType.SqlServer:
                    sqlGenerate.Sql = new StringBuilder($"SELECT it.* FROM ({sqlGenerate.Sql}) it where it.RowNumber > {skip} AND it.RowNumber <= {page * rows}");
                    break;
                case DatabaseType.GteSqlServer2012:
                    sqlGenerate += $" OFFSET {skip} ROW FETCH NEXT {rows} rows only";
                    break;
                case DatabaseType.MySql:
                    sqlGenerate += $" limit {skip}, {rows}";
                    break;
                case DatabaseType.SQLite:
                    sqlGenerate += $" limit {rows} offset {skip}";
                    break;
                case DatabaseType.PostgreSQL:
                    sqlGenerate += $" limit {rows} offset {skip}";
                    break;
                default:
                    break;
            }
            return this;
        }

        /// <summary>
        /// Offset
        /// </summary>
        /// <param name="offset"></param>
        /// <param name="size"></param>
        /// <returns></returns>
        public SqlExpressionCore<T> Offset(int offset, int size)
        {
            switch (sqlGenerate.DatabaseType)
            {
                case DatabaseType.SqlServer:
                    sqlGenerate.Sql = new StringBuilder($"SELECT it.* FROM ({sqlGenerate.Sql}) it where it.RowNumber > {offset} AND it.RowNumber <= {offset + size}");
                    break;
                case DatabaseType.GteSqlServer2012:
                    sqlGenerate += $" OFFSET {offset} ROW FETCH NEXT {size} rows only";
                    break;
                case DatabaseType.MySql:
                    sqlGenerate += $" limit {offset}, {size}";
                    break;
                case DatabaseType.SQLite:
                    sqlGenerate += $" limit {size} offset {offset}";
                    break;
                case DatabaseType.PostgreSQL:
                    sqlGenerate += $" limit {size} offset {offset}";
                    break;
                default:
                    break;
            }
            return this;
        }

        /// <summary>
        /// 最大
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        public SqlExpressionCore<T> Max(Expression<Func<T, object>> expression)
        {
            sqlGenerate.Clear();
            SqlExpressionProvider.Max(expression, sqlGenerate);
            return this;
        }

        /// <summary>
        /// 最小值
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        public SqlExpressionCore<T> Min(Expression<Func<T, object>> expression)
        {
            sqlGenerate.Clear();
            SqlExpressionProvider.Min(expression, sqlGenerate);
            return this;
        }

        /// <summary>
        /// 平均值
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        public SqlExpressionCore<T> Avg(Expression<Func<T, object>> expression)
        {
            sqlGenerate.Clear();
            SqlExpressionProvider.Avg(expression, sqlGenerate);
            return this;
        }

        /// <summary>
        /// 行数
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        public SqlExpressionCore<T> Count(Expression<Func<T, object>> expression = null)
        {
            sqlGenerate.Clear();
            if (expression == null)
                sqlGenerate.Sql.Append($"select count(*) from {sqlGenerate.TableName}");
            else
                SqlExpressionProvider.Count(expression, this.sqlGenerate);

            return this;
        }

        /// <summary>
        /// 总计
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        public SqlExpressionCore<T> Sum(Expression<Func<T, object>> expression)
        {
            sqlGenerate.Clear();
            SqlExpressionProvider.Sum(expression, sqlGenerate);
            return this;
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <returns></returns>
        public SqlExpressionCore<T> Delete()
        {
            sqlGenerate.Clear();
            sqlGenerate += $"delete from {sqlGenerate.TableName}";
            return this;
        }

        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        public SqlExpressionCore<T> Update(Expression<Func<object>> expression = null)
        {
            sqlGenerate.Clear();
            sqlGenerate += $"update {sqlGenerate.TableName} set ";
            SqlExpressionProvider.Update(expression, sqlGenerate);
            return this;
        }

        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="fields"></param>
        /// <returns></returns>
        public SqlExpressionCore<T> Update(IEnumerable<string> fields = null)
        {
            var setFields = new List<string>();
            var whereFields = new List<string>();

            var pis = typeof(T).GetProperties();
            var customPis = typeof(T).GetCustomFields();
            foreach (var pi in pis)
            {
                var obs = pi.GetCustomAttributes(typeof(KeyAttribute), false);
                if (obs?.Count() > 0)
                    whereFields.Add($"{pi.Name.ParamSql(sqlGenerate.DatabaseType)} = @{pi.Name}");
                else
                {
                    if ((fields?.Count() ?? 0) <= 0 || fields.Contains(pi.Name))
                        setFields.Add($"{pi.Name.ParamSql(sqlGenerate.DatabaseType)} = {pi.Name.ParamValue(sqlGenerate.DatabaseType, customPis)}");
                }
            }
            if (whereFields.Count <= 0)
                throw new Exception($"实体未设置主键Key属性");
            if (setFields.Count <= 0)
                throw new Exception($"实体未标记任何更新字段");

            sqlGenerate.Clear();
            sqlGenerate += $"update {sqlGenerate.TableName} set {string.Join(", ", setFields)} where {string.Join(", ", whereFields)}";
            return this;
        }
    }
}


================================================
FILE: src/Overt.Core.Data/Expressions/SqlExpression/SqlExpressionFingerprint.cs
================================================
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;

namespace Overt.Core.Data.Expressions
{
    /// <summary>
    /// base ServiceStack
    /// </summary>
    public class SqlExpressionFingerprint
    {
        internal sealed class BinaryExpressionFingerprint : ExpressionFingerprint
        {
            public BinaryExpressionFingerprint(ExpressionType nodeType, Type type, MethodInfo method)
                : base(nodeType, type)
            {
                // Other properties on BinaryExpression (like IsLifted / IsLiftedToNull) are simply derived
                // from Type and NodeType, so they're not necessary for inclusion in the fingerprint.

                Method = method;
            }

            // http://msdn.microsoft.com/en-us/library/system.linq.expressions.binaryexpression.method.aspx
            public MethodInfo Method { get; private set; }

            public override bool Equals(object obj)
            {
                BinaryExpressionFingerprint other = obj as BinaryExpressionFingerprint;
                return (other != null)
                       && Equals(this.Method, other.Method)
                       && this.Equals(other);
            }

            public override int GetHashCode()
            {
                return base.GetHashCode();
            }

            internal override void AddToHashCodeCombiner(HashCodeCombiner combiner)
            {
                combiner.AddObject(Method);
                base.AddToHashCodeCombiner(combiner);
            }
        }

        internal static class ExpressionCompiler
        {
            // This is the entry point to the cached expression compilation system. The system
            // will try to turn the expression into an actual delegate as quickly as possible,
            // relying on cache lookups and other techniques to save time if appropriate.
            // If the provided expression is particularly obscure and the system doesn't know
            // how to handle it, we'll just compile the expression as normal.
            public static Func<TModel, TValue> Process<TModel, TValue>(Expression<Func<TModel, TValue>> lambdaExpression)
            {
                return Compiler<TModel, TValue>.Compile(lambdaExpression);
            }

            private static class Compiler<TIn, TOut>
            {
                private static Func<TIn, TOut> _identityFunc;

                private static readonly ConcurrentDictionary<MemberInfo, Func<TIn, TOut>> _simpleMemberAccessDict =
                    new ConcurrentDictionary<MemberInfo, Func<TIn, TOut>>();

                private static readonly ConcurrentDictionary<MemberInfo, Func<object, TOut>> _constMemberAccessDict =
                    new ConcurrentDictionary<MemberInfo, Func<object, TOut>>();

                private static readonly ConcurrentDictionary<ExpressionFingerprintChain, Hoisted<TIn, TOut>> _fingerprintedCache =
                    new ConcurrentDictionary<ExpressionFingerprintChain, Hoisted<TIn, TOut>>();

                public static Func<TIn, TOut> Compile(Expression<Func<TIn, TOut>> expr)
                {
                    return CompileFromIdentityFunc(expr)
                           ?? CompileFromConstLookup(expr)
                           ?? CompileFromMemberAccess(expr)
                           ?? CompileFromFingerprint(expr)
                           ?? CompileSlow(expr);
                }

                private static Func<TIn, TOut> CompileFromConstLookup(Expression<Func<TIn, TOut>> expr)
                {
                    ConstantExpression constExpr = expr.Body as ConstantExpression;
                    if (constExpr != null)
                    {
                        // model => {const}

                        TOut constantValue = (TOut)constExpr.Value;
                        return _ => constantValue;
                    }

                    return null;
                }

                private static Func<TIn, TOut> CompileFromIdentityFunc(Expression<Func<TIn, TOut>> expr)
                {
                    if (expr.Body == expr.Parameters[0])
                    {
                        // model => model

                        // don't need to lock, as all identity funcs are identical
                        if (_identityFunc == null)
                        {
                            _identityFunc = expr.Compile();
                        }

                        return _identityFunc;
                    }

                    return null;
                }

                private static Func<TIn, TOut> CompileFromFingerprint(Expression<Func<TIn, TOut>> expr)
                {
                    List<object> capturedConstants;
                    ExpressionFingerprintChain fingerprint = FingerprintingExpressionVisitor.GetFingerprintChain(expr, out capturedConstants);

                    if (fingerprint != null)
                    {
                        var del = _fingerprintedCache.GetOrAdd(fingerprint, _ =>
                        {
                            // Fingerprinting succeeded, but there was a cache miss. Rewrite the expression
                            // and add the rewritten expression to the cache.

                            var hoistedExpr = HoistingExpressionVisitor<TIn, TOut>.Hoist(expr);
                            return hoistedExpr.Compile();
                        });
                        return model => del(model, capturedConstants);
                    }

                    // couldn't be fingerprinted
                    return null;
                }

                private static Func<TIn, TOut> CompileFromMemberAccess(Expression<Func<TIn, TOut>> expr)
                {
                    // Performance tests show that on the x64 platform, special-casing static member and
                    // captured local variable accesses is faster than letting the fingerprinting system
                    // handle them. On the x86 platform, the fingerprinting system is faster, but only
                    // by around one microsecond, so it's not worth it to complicate the logic here with
                    // an architecture check.

                    MemberExpression memberExpr = expr.Body as MemberExpression;
                    if (memberExpr != null)
                    {
                        if (memberExpr.Expression == expr.Parameters[0] || memberExpr.Expression == null)
                        {
                            // model => model.Member or model => StaticMember
                            return _simpleMemberAccessDict.GetOrAdd(memberExpr.Member, _ => expr.Compile());
                        }

                        ConstantExpression constExpr = memberExpr.Expression as ConstantExpression;
                        if (constExpr != null)
                        {
                            // model => {const}.Member (captured local variable)
                            var del = _constMemberAccessDict.GetOrAdd(memberExpr.Member, _ =>
                            {
                                // rewrite as capturedLocal => ((TDeclaringType)capturedLocal).Member
                                var constParamExpr = Expression.Parameter(typeof(object), "capturedLocal");
                                var constCastExpr = Expression.Convert(constParamExpr, memberExpr.Member.DeclaringType);
                                var newMemberAccessExpr = memberExpr.Update(constCastExpr);
                                var newLambdaExpr = Expression.Lambda<Func<object, TOut>>(newMemberAccessExpr, constParamExpr);
                                return newLambdaExpr.Compile();
                            });

                            object capturedLocal = constExpr.Value;
                            return _ => del(capturedLocal);
                        }
                    }

                    return null;
                }

                private static Func<TIn, TOut> CompileSlow(Expression<Func<TIn, TOut>> expr)
                {
                    // fallback compilation system - just compile the expression directly
                    return expr.Compile();
                }
            }
        }

        internal sealed class ConditionalExpressionFingerprint : ExpressionFingerprint
        {
            public ConditionalExpressionFingerprint(ExpressionType nodeType, Type type)
                : base(nodeType, type)
            {
                // There are no properties on ConditionalExpression that are worth including in
                // the fingerprint.
            }

            public override bool Equals(object obj)
            {
                ConditionalExpressionFingerprint other = obj as ConditionalExpressionFingerprint;
                return (other != null)
                       && this.Equals(other);
            }

            public override int GetHashCode()
            {
                return base.GetHashCode();
            }
        }

        internal sealed class ConstantExpressionFingerprint : ExpressionFingerprint
        {
            public ConstantExpressionFingerprint(ExpressionType nodeType, Type type)
                : base(nodeType, type)
            {
                // There are no properties on ConstantExpression that are worth including in
                // the fingerprint.
            }

            public override bool Equals(object obj)
            {
                ConstantExpressionFingerprint other = obj as ConstantExpressionFingerprint;
                return (other != null)
                       && this.Equals(other);
            }

            public override int GetHashCode()
            {
                return base.GetHashCode();
            }
        }

        internal sealed class DefaultExpressionFingerprint : ExpressionFingerprint
        {
            public DefaultExpressionFingerprint(ExpressionType nodeType, Type type)
                : base(nodeType, type)
            {
                // There are no properties on DefaultExpression that are worth including in
                // the fingerprint.
            }

            public override bool Equals(object obj)
            {
                DefaultExpressionFingerprint other = obj as DefaultExpressionFingerprint;
                return (other != null)
                       && this.Equals(other);
            }

            public override int GetHashCode()
            {
                return base.GetHashCode
Download .txt
gitextract_jy2ln_jg/

├── .gitattributes
├── .gitignore
├── README.md
├── core-data.sln
└── src/
    ├── .vs/
    │   ├── Sodao.Core/
    │   │   └── v15/
    │   │       └── Server/
    │   │           └── sqlite3/
    │   │               └── storage.ide
    │   └── config/
    │       └── applicationhost.config
    ├── Overt.Core.Data/
    │   ├── Attribute/
    │   │   └── SubmeterAttribute.cs
    │   ├── Constants.cs
    │   ├── Contract/
    │   │   ├── IBaseRepository.cs
    │   │   └── IPropertyAssist.cs
    │   ├── DataContext/
    │   │   ├── DataContext.cs
    │   │   └── DataSettings.cs
    │   ├── Enums/
    │   │   ├── DataCustomType.cs
    │   │   ├── DatabaseType.cs
    │   │   └── FieldSortType.cs
    │   ├── Expressions/
    │   │   ├── ExpressionHelper.cs
    │   │   ├── Extensions/
    │   │   │   └── Expression.Extensions.cs
    │   │   └── SqlExpression/
    │   │       ├── Resolve/
    │   │       │   ├── Basic/
    │   │       │   │   ├── BaseSqlExpression.cs
    │   │       │   │   └── ISqlExpression.cs
    │   │       │   ├── BinarySqlExpression.cs
    │   │       │   ├── ConstantSqlExpression.cs
    │   │       │   ├── LambdaSqlExpression.cs
    │   │       │   ├── ListInitSqlExpression.cs
    │   │       │   ├── MemberSqlExpression.cs
    │   │       │   ├── MethodCallSqlExpression.cs
    │   │       │   ├── NewArraySqlExpression.cs
    │   │       │   ├── NewSqlExpression.cs
    │   │       │   └── UnarySqlExpression.cs
    │   │       ├── SqlExpression.cs
    │   │       ├── SqlExpressionCompiler.cs
    │   │       ├── SqlExpressionCore.cs
    │   │       ├── SqlExpressionFingerprint.cs
    │   │       ├── SqlExpressionProvider.cs
    │   │       └── SqlGenerate.cs
    │   ├── Extensions/
    │   │   ├── Dapper.Async.Extensions.cs
    │   │   ├── Dapper.Extensions.cs
    │   │   ├── EntityDefinition.Extensions.cs
    │   │   ├── Expression.Extensions.cs
    │   │   ├── SqlAlias.Extensions.cs
    │   │   └── Table.Extensions.cs
    │   ├── Overt.Core.Data.csproj
    │   ├── Overt.Core.Data.xml
    │   ├── Params/
    │   │   └── OrderByField.cs
    │   └── Repository/
    │       ├── BaseRepository.cs
    │       └── PropertyAssist.cs
    ├── core/
    │   ├── Overt.Core.DataConsole/
    │   │   ├── Overt.Core.DataConsole.csproj
    │   │   ├── Program.cs
    │   │   └── appsettings.json
    │   ├── Overt.Core.Test/
    │   │   ├── ApplicationTest.cs
    │   │   ├── BaseTest.cs
    │   │   ├── Overt.Core.Test.csproj
    │   │   └── appsettings.json
    │   ├── Overt.User.Application/
    │   │   ├── AutoMapperProfiles.cs
    │   │   ├── Constracts/
    │   │   │   ├── ISubDbUser2Service.cs
    │   │   │   ├── ISubDbUserService.cs
    │   │   │   ├── ISubUserService.cs
    │   │   │   ├── IUserLongIdService.cs
    │   │   │   └── IUserService.cs
    │   │   ├── Extensions/
    │   │   │   └── ModelValidationExtensions.cs
    │   │   ├── Models/
    │   │   │   ├── UserModel.cs
    │   │   │   ├── UserPostModel.cs
    │   │   │   └── UserSearchModel.cs
    │   │   ├── Overt.User.Application.csproj
    │   │   ├── ServiceCollectionExtensions.cs
    │   │   └── Services/
    │   │       ├── SubDbUser2Service.cs
    │   │       ├── SubDbUserService.cs
    │   │       ├── SubUserService.cs
    │   │       ├── UserLongIdService.cs
    │   │       └── UserService.cs
    │   └── Overt.User.Domain/
    │       ├── Contracts/
    │       │   ├── ISubDbUser2Repository.cs
    │       │   ├── ISubDbUserRepository.cs
    │       │   ├── ISubUserRepository.cs
    │       │   ├── IUserLongIdRepository.cs
    │       │   └── IUserRepository.cs
    │       ├── Entities/
    │       │   ├── SubDbUser2Entity.cs
    │       │   ├── SubDbUserEntity.cs
    │       │   ├── SubUserEntity.cs
    │       │   ├── UserEntity.cs
    │       │   └── UserLongIdEntity.cs
    │       ├── Overt.User.Domain.csproj
    │       ├── Repositories/
    │       │   ├── SubDbUser2Repository.cs
    │       │   ├── SubDbUserRepository.cs
    │       │   ├── SubUserRepository.cs
    │       │   ├── UserLongIdRepository.cs
    │       │   └── UserRepository.cs
    │       └── ServiceCollectionExtensions.cs
    └── net46/
        ├── Overt.Core.DataConsole/
        │   ├── App.config
        │   ├── AutofacContainer.cs
        │   ├── Overt.Core.DataConsole.csproj
        │   ├── Program.cs
        │   ├── Properties/
        │   │   └── AssemblyInfo.cs
        │   └── packages.config
        ├── Overt.User.Application/
        │   ├── AutoMapperProfiles.cs
        │   ├── AutofacExtensions.cs
        │   ├── Constracts/
        │   │   ├── ISubDbUser2Service.cs
        │   │   ├── ISubDbUserService.cs
        │   │   ├── ISubUserService.cs
        │   │   └── IUserService.cs
        │   ├── Extensions/
        │   │   └── ModelValidationExtensions.cs
        │   ├── Models/
        │   │   ├── UserModel.cs
        │   │   ├── UserPostModel.cs
        │   │   └── UserSearchModel.cs
        │   ├── Overt.User.Application.csproj
        │   ├── Properties/
        │   │   └── AssemblyInfo.cs
        │   ├── Services/
        │   │   ├── SubDbUser2Service.cs
        │   │   ├── SubDbUserService.cs
        │   │   ├── SubUserService.cs
        │   │   └── UserService.cs
        │   └── packages.config
        └── Overt.User.Domain/
            ├── AutofacExtensions.cs
            ├── Contracts/
            │   ├── ISubDbUser2Repository.cs
            │   ├── ISubDbUserRepository.cs
            │   ├── ISubUserRepository.cs
            │   └── IUserRepository.cs
            ├── Entities/
            │   ├── SubDbUser2Entity.cs
            │   ├── SubDbUserEntity.cs
            │   ├── SubUserEntity.cs
            │   └── UserEntity.cs
            ├── Overt.User.Domain.csproj
            ├── Properties/
            │   └── AssemblyInfo.cs
            ├── Repositories/
            │   ├── SubDbUser2Repository.cs
            │   ├── SubDbUserRepository.cs
            │   ├── SubUserRepository.cs
            │   └── UserRepository.cs
            └── packages.config
Download .txt
SYMBOL INDEX (659 symbols across 101 files)

FILE: src/Overt.Core.Data/Attribute/SubmeterAttribute.cs
  class SubmeterAttribute (line 8) | [Obsolete("请使用TableNameFunc")]

FILE: src/Overt.Core.Data/Constants.cs
  class Constants (line 3) | internal class Constants
    class MSSQLVersion (line 5) | public static class MSSQLVersion

FILE: src/Overt.Core.Data/Contract/IBaseRepository.cs
  type IBaseRepository (line 12) | public interface IBaseRepository<TEntity> : IPropertyAssist where TEntit...
    method GetMainTableName (line 19) | string GetMainTableName();
    method GetTableName (line 25) | string GetTableName();
    method GetTableName (line 32) | [Obsolete("请使用GetTableName")]
    method IsExistTable (line 41) | bool IsExistTable(string tableName, bool isMaster = true);
    method IsExistField (line 50) | bool IsExistField(string tableName, string fieldName, bool isMaster = ...
    method Add (line 58) | bool Add(TEntity entity, bool returnLastIdentity = false);
    method Add (line 65) | bool Add(params TEntity[] entities);
    method Delete (line 72) | bool Delete(Expression<Func<TEntity, bool>> expression);
    method Set (line 80) | bool Set(TEntity entity, Expression<Func<TEntity, object>> fields = nu...
    method Set (line 88) | bool Set(Expression<Func<object>> setExpress, Expression<Func<TEntity,...
    method Incr (line 97) | bool Incr<TValue>(string field, TValue value, Expression<Func<TEntity,...
    method Get (line 106) | TEntity Get(Expression<Func<TEntity, bool>> expression, Expression<Fun...
    method GetList (line 118) | IEnumerable<TEntity> GetList(int page, int rows, Expression<Func<TEnti...
    method GetOffsets (line 130) | IEnumerable<TEntity> GetOffsets(int offset, int size, Expression<Func<...
    method Count (line 138) | int Count(Expression<Func<TEntity, bool>> expression = null, bool isMa...
    method IsExistTableAsync (line 148) | Task<bool> IsExistTableAsync(string tableName, bool isMaster = true);
    method IsExistFieldAsync (line 157) | Task<bool> IsExistFieldAsync(string tableName, string fieldName, bool ...
    method AddAsync (line 165) | Task<bool> AddAsync(TEntity entity, bool returnLastIdentity = false);
    method AddAsync (line 173) | Task<bool> AddAsync(params TEntity[] entities);
    method DeleteAsync (line 180) | Task<bool> DeleteAsync(Expression<Func<TEntity, bool>> expression);
    method SetAsync (line 188) | Task<bool> SetAsync(TEntity entity, Expression<Func<TEntity, object>> ...
    method SetAsync (line 196) | Task<bool> SetAsync(Expression<Func<object>> setExpress, Expression<Fu...
    method IncrAsync (line 205) | Task<bool> IncrAsync<TValue>(string field, TValue value, Expression<Fu...
    method GetAsync (line 214) | Task<TEntity> GetAsync(Expression<Func<TEntity, bool>> expression, Exp...
    method GetListAsync (line 226) | Task<IEnumerable<TEntity>> GetListAsync(int page, int rows, Expression...
    method GetOffsetsAsync (line 238) | Task<IEnumerable<TEntity>> GetOffsetsAsync(int offset, int size, Expre...
    method CountAsync (line 246) | Task<int> CountAsync(Expression<Func<TEntity, bool>> expression = null...

FILE: src/Overt.Core.Data/Contract/IPropertyAssist.cs
  type IPropertyAssist (line 12) | public interface IPropertyAssist
    method OpenConnection (line 51) | IDbConnection OpenConnection(bool isMaster = false);

FILE: src/Overt.Core.Data/DataContext/DataContext.cs
  class DataContext (line 19) | public class DataContext : IDisposable
    method DataContext (line 52) | public DataContext(IConfiguration configuration, bool isMaster = false...
    method DataContext (line 69) | public DataContext(bool isMaster = false, string dbStoreKey = "", Func...
    method CreateAndOpen (line 85) | private void CreateAndOpen()
    method GetFactory (line 115) | private DbProviderFactory GetFactory(DatabaseType dbType)
    method Dispose (line 142) | public void Dispose()

FILE: src/Overt.Core.Data/DataContext/DataSettings.cs
  class DataSettings (line 16) | public class DataSettings
    method DataSettings (line 50) | private DataSettings()
    method Get (line 65) | public (string, DatabaseType) Get(IConfiguration configuration, bool i...
    method ResolveConnectionString (line 101) | private (string, DatabaseType) ResolveConnectionString(string connecti...
    method Get (line 122) | public ConnectionStringSettings Get(bool isMaster, string dbStoreKey, ...
    method GetKey (line 146) | private string GetKey(bool isMaster = false, string dbStoreKey = "")

FILE: src/Overt.Core.Data/Enums/DataCustomType.cs
  type DataCustomType (line 12) | public enum DataCustomType

FILE: src/Overt.Core.Data/Enums/DatabaseType.cs
  type DatabaseType (line 6) | public enum DatabaseType

FILE: src/Overt.Core.Data/Enums/FieldSortType.cs
  type FieldSortType (line 6) | public enum FieldSortType

FILE: src/Overt.Core.Data/Expressions/ExpressionHelper.cs
  class ExpressionHelper (line 10) | internal class ExpressionHelper
    method Resolve (line 17) | public static void Resolve(Expression expression, ref Dictionary<objec...
    method ResolveBinary (line 30) | private static void ResolveBinary(BinaryExpression expression, ref Dic...
    method ResolveMemberOrConstant (line 59) | private static object ResolveMemberOrConstant(Expression expression)
    method ResolveMember (line 71) | private static object ResolveMember(MemberExpression expression)
    method ResolveConstant (line 86) | private static object ResolveConstant(ConstantExpression expression)

FILE: src/Overt.Core.Data/Expressions/Extensions/Expression.Extensions.cs
  class ExpressionExtensions (line 12) | public static class ExpressionExtensions
    method IsNullableType (line 19) | public static bool IsNullableType(this Type type)
    method IsOrHasGenericInterfaceTypeOf (line 30) | public static bool IsOrHasGenericInterfaceTypeOf(this Type type, Type ...
    method GetTypeWithGenericTypeDefinitionOf (line 42) | public static Type GetTypeWithGenericTypeDefinitionOf(this Type type, ...
    method FirstGenericType (line 66) | public static Type FirstGenericType(this Type type)
    method GetMemberExpression (line 83) | public static string GetMemberExpression(this MemberExpression m)
    method IsParameterAccess (line 93) | public static bool IsParameterAccess(Expression e)
    method IsParameterOrConvertAccess (line 103) | public static bool IsParameterOrConvertAccess(this Expression e)
    method CheckExpressionForTypes (line 114) | public static bool CheckExpressionForTypes(this Expression e, Expressi...
    method IsBooleanComparison (line 181) | public static bool IsBooleanComparison(this Expression e)
    method GetValue (line 200) | public static object GetValue(this MemberBinding binding)
    method GetFieldNames (line 230) | public static string[] GetFieldNames<T>(this Expression<Func<T, object...
    method Flatten (line 266) | public static List<object> Flatten(this IEnumerable list)

FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/Basic/BaseSqlExpression.cs
  class BaseSqlExpression (line 11) | public abstract class BaseSqlExpression<T> : ISqlExpression where T : Ex...
    method Update (line 19) | protected virtual SqlGenerate Update(T expression, SqlGenerate sqlGene...
    method Select (line 30) | protected virtual SqlGenerate Select(T expression, SqlGenerate sqlGene...
    method Where (line 41) | protected virtual SqlGenerate Where(T expression, SqlGenerate sqlGener...
    method In (line 52) | protected virtual SqlGenerate In(T expression, SqlGenerate sqlGenerate)
    method OrderBy (line 63) | protected virtual SqlGenerate OrderBy(T expression, SqlGenerate sqlGen...
    method Max (line 74) | protected virtual SqlGenerate Max(T expression, SqlGenerate sqlGenerate)
    method Min (line 85) | protected virtual SqlGenerate Min(T expression, SqlGenerate sqlGenerate)
    method Avg (line 96) | protected virtual SqlGenerate Avg(T expression, SqlGenerate sqlGenerate)
    method Count (line 107) | protected virtual SqlGenerate Count(T expression, SqlGenerate sqlGener...
    method Sum (line 117) | protected virtual SqlGenerate Sum(T expression, SqlGenerate sqlGenerate)
    method Update (line 128) | public SqlGenerate Update(Expression expression, SqlGenerate sqlGenerate)
    method Select (line 139) | public SqlGenerate Select(Expression expression, SqlGenerate sqlGenerate)
    method Where (line 150) | public SqlGenerate Where(Expression expression, SqlGenerate sqlGenerate)
    method In (line 161) | public SqlGenerate In(Expression expression, SqlGenerate sqlGenerate)
    method OrderBy (line 172) | public SqlGenerate OrderBy(Expression expression, SqlGenerate sqlGener...
    method Max (line 183) | public SqlGenerate Max(Expression expression, SqlGenerate sqlGenerate)
    method Min (line 194) | public SqlGenerate Min(Expression expression, SqlGenerate sqlGenerate)
    method Avg (line 205) | public SqlGenerate Avg(Expression expression, SqlGenerate sqlGenerate)
    method Count (line 216) | public SqlGenerate Count(Expression expression, SqlGenerate sqlGenerate)
    method Sum (line 227) | public SqlGenerate Sum(Expression expression, SqlGenerate sqlGenerate)
    method IsStaticArrayMethod (line 238) | internal static bool IsStaticArrayMethod(MethodCallExpression m)
    method IsEnumerableMethod (line 249) | internal static bool IsEnumerableMethod(MethodCallExpression m)

FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/Basic/ISqlExpression.cs
  type ISqlExpression (line 8) | public interface ISqlExpression
    method Update (line 16) | SqlGenerate Update(Expression expression, SqlGenerate sqlGenerate);
    method Select (line 23) | SqlGenerate Select(Expression expression, SqlGenerate sqlGenerate);
    method Where (line 30) | SqlGenerate Where(Expression expression, SqlGenerate sqlGenerate);
    method In (line 37) | SqlGenerate In(Expression expression, SqlGenerate sqlGenerate);
    method OrderBy (line 44) | SqlGenerate OrderBy(Expression expression, SqlGenerate sqlGenerate);
    method Max (line 51) | SqlGenerate Max(Expression expression, SqlGenerate sqlGenerate);
    method Min (line 58) | SqlGenerate Min(Expression expression, SqlGenerate sqlGenerate);
    method Avg (line 65) | SqlGenerate Avg(Expression expression, SqlGenerate sqlGenerate);
    method Count (line 72) | SqlGenerate Count(Expression expression, SqlGenerate sqlGenerate);
    method Sum (line 79) | SqlGenerate Sum(Expression expression, SqlGenerate sqlGenerate);

FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/BinarySqlExpression.cs
  class BinarySqlExpression (line 6) | class BinarySqlExpression : BaseSqlExpression<BinaryExpression>
    method OperatorParser (line 8) | private void OperatorParser(ExpressionType expressionNodeType, int ope...
    method Where (line 53) | protected override SqlGenerate Where(BinaryExpression expression, SqlG...

FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/ConstantSqlExpression.cs
  class ConstantSqlExpression (line 6) | class ConstantSqlExpression : BaseSqlExpression<ConstantExpression>
    method Where (line 8) | protected override SqlGenerate Where(ConstantExpression expression, Sq...
    method In (line 14) | protected override SqlGenerate In(ConstantExpression expression, SqlGe...
    method Select (line 21) | protected override SqlGenerate Select(ConstantExpression expression, S...

FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/LambdaSqlExpression.cs
  class LambdaSqlExpression (line 8) | public class LambdaSqlExpression : BaseSqlExpression<LambdaExpression>
    method Update (line 10) | protected override SqlGenerate Update(LambdaExpression expression, Sql...
    method Select (line 15) | protected override SqlGenerate Select(LambdaExpression expression, Sql...
    method Where (line 20) | protected override SqlGenerate Where(LambdaExpression expression, SqlG...
    method In (line 41) | protected override SqlGenerate In(LambdaExpression expression, SqlGene...
    method OrderBy (line 46) | protected override SqlGenerate OrderBy(LambdaExpression expression, Sq...
    method Max (line 51) | protected override SqlGenerate Max(LambdaExpression expression, SqlGen...
    method Min (line 56) | protected override SqlGenerate Min(LambdaExpression expression, SqlGen...
    method Avg (line 61) | protected override SqlGenerate Avg(LambdaExpression expression, SqlGen...
    method Count (line 66) | protected override SqlGenerate Count(LambdaExpression expression, SqlG...
    method Sum (line 71) | protected override SqlGenerate Sum(LambdaExpression expression, SqlGen...

FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/ListInitSqlExpression.cs
  class ListInitSqlExpression (line 6) | class ListInitSqlExpression : BaseSqlExpression<ListInitExpression>
    method In (line 8) | protected override SqlGenerate In(ListInitExpression expression, SqlGe...
    method Select (line 23) | protected override SqlGenerate Select(ListInitExpression expression, S...

FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/MemberSqlExpression.cs
  class MemberSqlExpression (line 9) | class MemberSqlExpression : BaseSqlExpression<MemberExpression>
    method Select (line 11) | protected override SqlGenerate Select(MemberExpression expression, Sql...
    method Where (line 29) | protected override SqlGenerate Where(MemberExpression expression, SqlG...
    method In (line 62) | protected override SqlGenerate In(MemberExpression expression, SqlGene...
    method OrderBy (line 73) | protected override SqlGenerate OrderBy(MemberExpression expression, Sq...
    method Update (line 79) | protected override SqlGenerate Update(MemberExpression expression, Sql...
    method Max (line 118) | protected override SqlGenerate Max(MemberExpression expression, SqlGen...
    method Min (line 124) | protected override SqlGenerate Min(MemberExpression expression, SqlGen...
    method Avg (line 130) | protected override SqlGenerate Avg(MemberExpression expression, SqlGen...
    method Count (line 136) | protected override SqlGenerate Count(MemberExpression expression, SqlG...
    method Sum (line 142) | protected override SqlGenerate Sum(MemberExpression expression, SqlGen...
    method IsEnumerable (line 153) | internal static bool IsEnumerable(MemberExpression m)

FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/MethodCallSqlExpression.cs
  class MethodCallSqlExpression (line 7) | class MethodCallSqlExpression : BaseSqlExpression<MethodCallExpression>
    method In (line 19) | private static new void In(MethodCallExpression expression, SqlGenerat...
    method Equals (line 26) | private static void Equals(MethodCallExpression expression, SqlGenerat...
    method Contains (line 33) | private static void Contains(MethodCallExpression expression, SqlGener...
    method EndsWith (line 52) | private static void EndsWith(MethodCallExpression expression, SqlGener...
    method StartsWith (line 62) | private static void StartsWith(MethodCallExpression expression, SqlGen...
    method Format (line 72) | private static void Format(MethodCallExpression expression, SqlGenerat...
    method Where (line 88) | protected override SqlGenerate Where(MethodCallExpression expression, ...
    method Update (line 104) | protected override SqlGenerate Update(MethodCallExpression expression,...
    method DoEnumerableMethodCall (line 123) | internal static void DoEnumerableMethodCall(MethodCallExpression expre...
    method DoStaticArrayMethodCall (line 130) | internal static void DoStaticArrayMethodCall(MethodCallExpression expr...

FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/NewArraySqlExpression.cs
  class NewArraySqlExpression (line 6) | class NewArraySqlExpression : BaseSqlExpression<NewArrayExpression>
    method In (line 8) | protected override SqlGenerate In(NewArrayExpression expression, SqlGe...

FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/NewSqlExpression.cs
  class NewSqlExpression (line 6) | class NewSqlExpression : BaseSqlExpression<NewExpression>
    method Update (line 8) | protected override SqlGenerate Update(NewExpression expression, SqlGen...
    method Select (line 25) | protected override SqlGenerate Select(NewExpression expression, SqlGen...
    method OrderBy (line 34) | protected override SqlGenerate OrderBy(NewExpression expression, SqlGe...

FILE: src/Overt.Core.Data/Expressions/SqlExpression/Resolve/UnarySqlExpression.cs
  class UnarySqlExpression (line 5) | class UnarySqlExpression : BaseSqlExpression<UnaryExpression>
    method Select (line 7) | protected override SqlGenerate Select(UnaryExpression expression, SqlG...
    method Where (line 13) | protected override SqlGenerate Where(UnaryExpression expression, SqlGe...
    method OrderBy (line 39) | protected override SqlGenerate OrderBy(UnaryExpression expression, Sql...
    method Max (line 45) | protected override SqlGenerate Max(UnaryExpression expression, SqlGene...
    method Min (line 51) | protected override SqlGenerate Min(UnaryExpression expression, SqlGene...
    method Avg (line 57) | protected override SqlGenerate Avg(UnaryExpression expression, SqlGene...
    method Count (line 63) | protected override SqlGenerate Count(UnaryExpression expression, SqlGe...
    method Sum (line 69) | protected override SqlGenerate Sum(UnaryExpression expression, SqlGene...

FILE: src/Overt.Core.Data/Expressions/SqlExpression/SqlExpression.cs
  class SqlExpression (line 10) | public static class SqlExpression
    method Insert (line 20) | public static SqlExpressionCore<T> Insert<T>(DatabaseType dbType, stri...
    method Delete (line 32) | public static SqlExpressionCore<T> Delete<T>(DatabaseType dbType, stri...
    method Update (line 45) | public static SqlExpressionCore<T> Update<T>(DatabaseType dbType, Expr...
    method Update (line 58) | public static SqlExpressionCore<T> Update<T>(DatabaseType dbType, IEnu...
    method Select (line 71) | public static SqlExpressionCore<T> Select<T>(DatabaseType dbType, Expr...
    method Count (line 84) | public static SqlExpressionCore<T> Count<T>(DatabaseType dbType, Expre...
    method Max (line 97) | public static SqlExpressionCore<T> Max<T>(DatabaseType dbType, Express...
    method Min (line 110) | public static SqlExpressionCore<T> Min<T>(DatabaseType dbType, Express...
    method Avg (line 123) | public static SqlExpressionCore<T> Avg<T>(DatabaseType dbType, Express...
    method Sum (line 136) | public static SqlExpressionCore<T> Sum<T>(DatabaseType dbType, Express...

FILE: src/Overt.Core.Data/Expressions/SqlExpression/SqlExpressionCompiler.cs
  class SqlExpressionCompiler (line 11) | public static class SqlExpressionCompiler
    method Compile (line 22) | public static Func<TModel, TValue> Compile<TModel, TValue>(this Expres...
    method Evaluate (line 34) | public static object Evaluate(Expression arg)
    method Wrap (line 43) | private static Func<object, object> Wrap(Expression arg)

FILE: src/Overt.Core.Data/Expressions/SqlExpression/SqlExpressionCore.cs
  class SqlExpressionCore (line 14) | public class SqlExpressionCore<T>
    method SqlExpressionCore (line 31) | public SqlExpressionCore(DatabaseType dbType, string tableName = "")
    method Clear (line 43) | public void Clear()
    method Insert (line 53) | public SqlExpressionCore<T> Insert(bool returnLastIdentity)
    method Select (line 84) | public SqlExpressionCore<T> Select(Expression<Func<T, object>> express...
    method Where (line 106) | public SqlExpressionCore<T> Where(Expression<Func<T, bool>> expression)
    method OrderBy (line 121) | public SqlExpressionCore<T> OrderBy(string orderBy)
    method TopOne (line 163) | public SqlExpressionCore<T> TopOne()
    method Limit (line 192) | public SqlExpressionCore<T> Limit(int page, int rows)
    method Offset (line 224) | public SqlExpressionCore<T> Offset(int offset, int size)
    method Max (line 254) | public SqlExpressionCore<T> Max(Expression<Func<T, object>> expression)
    method Min (line 266) | public SqlExpressionCore<T> Min(Expression<Func<T, object>> expression)
    method Avg (line 278) | public SqlExpressionCore<T> Avg(Expression<Func<T, object>> expression)
    method Count (line 290) | public SqlExpressionCore<T> Count(Expression<Func<T, object>> expressi...
    method Sum (line 306) | public SqlExpressionCore<T> Sum(Expression<Func<T, object>> expression)
    method Delete (line 317) | public SqlExpressionCore<T> Delete()
    method Update (line 329) | public SqlExpressionCore<T> Update(Expression<Func<object>> expression...
    method Update (line 342) | public SqlExpressionCore<T> Update(IEnumerable<string> fields = null)

FILE: src/Overt.Core.Data/Expressions/SqlExpression/SqlExpressionFingerprint.cs
  class SqlExpressionFingerprint (line 14) | public class SqlExpressionFingerprint
    class BinaryExpressionFingerprint (line 16) | internal sealed class BinaryExpressionFingerprint : ExpressionFingerprint
      method BinaryExpressionFingerprint (line 18) | public BinaryExpressionFingerprint(ExpressionType nodeType, Type typ...
      method Equals (line 30) | public override bool Equals(object obj)
      method GetHashCode (line 38) | public override int GetHashCode()
      method AddToHashCodeCombiner (line 43) | internal override void AddToHashCodeCombiner(HashCodeCombiner combiner)
    class ExpressionCompiler (line 50) | internal static class ExpressionCompiler
      method Process (line 57) | public static Func<TModel, TValue> Process<TModel, TValue>(Expressio...
      class Compiler (line 62) | private static class Compiler<TIn, TOut>
        method Compile (line 75) | public static Func<TIn, TOut> Compile(Expression<Func<TIn, TOut>> ...
        method CompileFromConstLookup (line 84) | private static Func<TIn, TOut> CompileFromConstLookup(Expression<F...
        method CompileFromIdentityFunc (line 98) | private static Func<TIn, TOut> CompileFromIdentityFunc(Expression<...
        method CompileFromFingerprint (line 116) | private static Func<TIn, TOut> CompileFromFingerprint(Expression<F...
        method CompileFromMemberAccess (line 138) | private static Func<TIn, TOut> CompileFromMemberAccess(Expression<...
        method CompileSlow (line 177) | private static Func<TIn, TOut> CompileSlow(Expression<Func<TIn, TO...
    class ConditionalExpressionFingerprint (line 185) | internal sealed class ConditionalExpressionFingerprint : ExpressionFin...
      method ConditionalExpressionFingerprint (line 187) | public ConditionalExpressionFingerprint(ExpressionType nodeType, Typ...
      method Equals (line 194) | public override bool Equals(object obj)
      method GetHashCode (line 201) | public override int GetHashCode()
    class ConstantExpressionFingerprint (line 207) | internal sealed class ConstantExpressionFingerprint : ExpressionFinger...
      method ConstantExpressionFingerprint (line 209) | public ConstantExpressionFingerprint(ExpressionType nodeType, Type t...
      method Equals (line 216) | public override bool Equals(object obj)
      method GetHashCode (line 223) | public override int GetHashCode()
    class DefaultExpressionFingerprint (line 229) | internal sealed class DefaultExpressionFingerprint : ExpressionFingerp...
      method DefaultExpressionFingerprint (line 231) | public DefaultExpressionFingerprint(ExpressionType nodeType, Type type)
      method Equals (line 238) | public override bool Equals(object obj)
      method GetHashCode (line 245) | public override int GetHashCode()
    class ExpressionFingerprint (line 251) | internal abstract class ExpressionFingerprint
      method ExpressionFingerprint (line 253) | protected ExpressionFingerprint(ExpressionType nodeType, Type type)
      method AddToHashCodeCombiner (line 265) | internal virtual void AddToHashCodeCombiner(HashCodeCombiner combiner)
      method Equals (line 271) | protected bool Equals(ExpressionFingerprint other)
      method Equals (line 278) | public override bool Equals(object obj)
      method GetHashCode (line 283) | public override int GetHashCode()
    class ExpressionFingerprintChain (line 291) | internal sealed class ExpressionFingerprintChain : IEquatable<Expressi...
      method Equals (line 295) | public bool Equals(ExpressionFingerprintChain other)
      method Equals (line 321) | public override bool Equals(object obj)
      method GetHashCode (line 326) | public override int GetHashCode()
    class FingerprintingExpressionVisitor (line 335) | internal sealed class FingerprintingExpressionVisitor : ExpressionVisitor
      method FingerprintingExpressionVisitor (line 342) | private FingerprintingExpressionVisitor()
      method GiveUp (line 346) | private T GiveUp<T>(T node)
      method GetFingerprintChain (line 356) | public static ExpressionFingerprintChain GetFingerprintChain(Express...
      method Visit (line 373) | public override Expression Visit(Expression node)
      method VisitBinary (line 386) | protected override Expression VisitBinary(BinaryExpression node)
      method VisitBlock (line 396) | protected override Expression VisitBlock(BlockExpression node)
      method VisitCatchBlock (line 401) | protected override CatchBlock VisitCatchBlock(CatchBlock node)
      method VisitConditional (line 406) | protected override Expression VisitConditional(ConditionalExpression...
      method VisitConstant (line 416) | protected override Expression VisitConstant(ConstantExpression node)
      method VisitDebugInfo (line 428) | protected override Expression VisitDebugInfo(DebugInfoExpression node)
      method VisitDefault (line 433) | protected override Expression VisitDefault(DefaultExpression node)
      method VisitDynamic (line 445) | override
      method VisitElementInit (line 452) | protected override ElementInit VisitElementInit(ElementInit node)
      method VisitExtension (line 457) | protected override Expression VisitExtension(Expression node)
      method VisitGoto (line 462) | protected override Expression VisitGoto(GotoExpression node)
      method VisitIndex (line 467) | protected override Expression VisitIndex(IndexExpression node)
      method VisitInvocation (line 477) | protected override Expression VisitInvocation(InvocationExpression n...
      method VisitLabel (line 482) | protected override Expression VisitLabel(LabelExpression node)
      method VisitLabelTarget (line 487) | protected override LabelTarget VisitLabelTarget(LabelTarget node)
      method VisitLambda (line 492) | protected override Expression VisitLambda<T>(Expression<T> node)
      method VisitListInit (line 502) | protected override Expression VisitListInit(ListInitExpression node)
      method VisitLoop (line 507) | protected override Expression VisitLoop(LoopExpression node)
      method VisitMember (line 512) | protected override Expression VisitMember(MemberExpression node)
      method VisitMemberAssignment (line 522) | protected override MemberAssignment VisitMemberAssignment(MemberAssi...
      method VisitMemberBinding (line 527) | protected override MemberBinding VisitMemberBinding(MemberBinding node)
      method VisitMemberInit (line 532) | protected override Expression VisitMemberInit(MemberInitExpression n...
      method VisitMemberListBinding (line 537) | protected override MemberListBinding VisitMemberListBinding(MemberLi...
      method VisitMemberMemberBinding (line 542) | protected override MemberMemberBinding VisitMemberMemberBinding(Memb...
      method VisitMethodCall (line 547) | protected override Expression VisitMethodCall(MethodCallExpression n...
      method VisitNew (line 557) | protected override Expression VisitNew(NewExpression node)
      method VisitNewArray (line 562) | protected override Expression VisitNewArray(NewArrayExpression node)
      method VisitParameter (line 567) | protected override Expression VisitParameter(ParameterExpression node)
      method VisitRuntimeVariables (line 586) | protected override Expression VisitRuntimeVariables(RuntimeVariables...
      method VisitSwitch (line 591) | protected override Expression VisitSwitch(SwitchExpression node)
      method VisitSwitchCase (line 596) | protected override SwitchCase VisitSwitchCase(SwitchCase node)
      method VisitTry (line 601) | protected override Expression VisitTry(TryExpression node)
      method VisitTypeBinary (line 606) | protected override Expression VisitTypeBinary(TypeBinaryExpression n...
      method VisitUnary (line 616) | protected override Expression VisitUnary(UnaryExpression node)
      class HashCodeCombiner (line 627) | internal class HashCodeCombiner
        method AddFingerprint (line 636) | public void AddFingerprint(ExpressionFingerprint fingerprint)
        method AddEnumerable (line 648) | public void AddEnumerable(IEnumerable e)
        method AddInt32 (line 666) | public void AddInt32(int i)
        method AddObject (line 671) | public void AddObject(object o)
      class HoistingExpressionVisitor (line 680) | internal sealed class HoistingExpressionVisitor<TIn, TOut> : Express...
        method HoistingExpressionVisitor (line 686) | private HoistingExpressionVisitor()
        method Hoist (line 690) | public static Expression<Hoisted<TIn, TOut>> Hoist(Expression<Func...
        method VisitConstant (line 700) | protected override Expression VisitConstant(ConstantExpression node)
      class IndexExpressionFingerprint (line 707) | internal sealed class IndexExpressionFingerprint : ExpressionFingerp...
        method IndexExpressionFingerprint (line 709) | public IndexExpressionFingerprint(ExpressionType nodeType, Type ty...
        method Equals (line 721) | public override bool Equals(object obj)
        method GetHashCode (line 729) | public override int GetHashCode()
        method AddToHashCodeCombiner (line 734) | internal override void AddToHashCodeCombiner(HashCodeCombiner comb...
      class LambdaExpressionFingerprint (line 741) | internal sealed class LambdaExpressionFingerprint : ExpressionFinger...
        method LambdaExpressionFingerprint (line 743) | public LambdaExpressionFingerprint(ExpressionType nodeType, Type t...
        method Equals (line 750) | public override bool Equals(object obj)
        method GetHashCode (line 757) | public override int GetHashCode()
      class MemberExpressionFingerprint (line 763) | internal sealed class MemberExpressionFingerprint : ExpressionFinger...
        method MemberExpressionFingerprint (line 765) | public MemberExpressionFingerprint(ExpressionType nodeType, Type t...
        method Equals (line 774) | public override bool Equals(object obj)
        method GetHashCode (line 782) | public override int GetHashCode()
        method AddToHashCodeCombiner (line 787) | internal override void AddToHashCodeCombiner(HashCodeCombiner comb...
      class MethodCallExpressionFingerprint (line 794) | internal sealed class MethodCallExpressionFingerprint : ExpressionFi...
        method MethodCallExpressionFingerprint (line 796) | public MethodCallExpressionFingerprint(ExpressionType nodeType, Ty...
        method Equals (line 808) | public override bool Equals(object obj)
        method GetHashCode (line 816) | public override int GetHashCode()
        method AddToHashCodeCombiner (line 821) | internal override void AddToHashCodeCombiner(HashCodeCombiner comb...
      class ParameterExpressionFingerprint (line 828) | internal sealed class ParameterExpressionFingerprint : ExpressionFin...
        method ParameterExpressionFingerprint (line 830) | public ParameterExpressionFingerprint(ExpressionType nodeType, Typ...
        method Equals (line 839) | public override bool Equals(object obj)
        method GetHashCode (line 847) | public override int GetHashCode()
        method AddToHashCodeCombiner (line 852) | internal override void AddToHashCodeCombiner(HashCodeCombiner comb...
      class TypeBinaryExpressionFingerprint (line 859) | internal sealed class TypeBinaryExpressionFingerprint : ExpressionFi...
        method TypeBinaryExpressionFingerprint (line 861) | public TypeBinaryExpressionFingerprint(ExpressionType nodeType, Ty...
        method Equals (line 870) | public override bool Equals(object obj)
        method GetHashCode (line 878) | public override int GetHashCode()
        method AddToHashCodeCombiner (line 883) | internal override void AddToHashCodeCombiner(HashCodeCombiner comb...
      class UnaryExpressionFingerprint (line 890) | internal sealed class UnaryExpressionFingerprint : ExpressionFingerp...
        method UnaryExpressionFingerprint (line 892) | public UnaryExpressionFingerprint(ExpressionType nodeType, Type ty...
        method Equals (line 904) | public override bool Equals(object obj)
        method GetHashCode (line 912) | public override int GetHashCode()
        method AddToHashCodeCombiner (line 917) | internal override void AddToHashCodeCombiner(HashCodeCombiner comb...

FILE: src/Overt.Core.Data/Expressions/SqlExpression/SqlExpressionProvider.cs
  class SqlExpressionProvider (line 6) | internal class SqlExpressionProvider
    method GetSqlExpression (line 8) | internal static ISqlExpression GetSqlExpression(Expression expression)
    method Update (line 123) | public static void Update(Expression expression, SqlGenerate sqlGenerate)
    method Select (line 128) | public static void Select(Expression expression, SqlGenerate sqlGenerate)
    method Where (line 133) | public static void Where(Expression expression, SqlGenerate sqlGenerate)
    method In (line 138) | public static void In(Expression expression, SqlGenerate sqlGenerate)
    method OrderBy (line 143) | public static void OrderBy(Expression expression, SqlGenerate sqlGener...
    method Max (line 148) | public static void Max(Expression expression, SqlGenerate sqlGenerate)
    method Min (line 153) | public static void Min(Expression expression, SqlGenerate sqlGenerate)
    method Avg (line 158) | public static void Avg(Expression expression, SqlGenerate sqlGenerate)
    method Count (line 163) | public static void Count(Expression expression, SqlGenerate sqlGenerate)
    method Sum (line 168) | public static void Sum(Expression expression, SqlGenerate sqlGenerate)

FILE: src/Overt.Core.Data/Expressions/SqlExpression/SqlGenerate.cs
  class SqlGenerate (line 11) | public class SqlGenerate
    method SqlGenerate (line 86) | public SqlGenerate()
    method Clear (line 110) | public void Clear()
    method RelaceLast (line 124) | public void RelaceLast(string oldStr, string newStr)
    method AddDbParameter (line 136) | public void AddDbParameter(object parameterValue)
    method CombineInParameters (line 152) | public void CombineInParameters(List<object> parameterValues)
    method ToString (line 163) | public override string ToString()

FILE: src/Overt.Core.Data/Extensions/Dapper.Async.Extensions.cs
  class DapperExtensions (line 16) | public static partial class DapperExtensions
    method IsExistTableAsync (line 26) | public static async Task<bool> IsExistTableAsync(this IDbConnection co...
    method IsExistFieldAsync (line 47) | public static async Task<bool> IsExistFieldAsync(this IDbConnection co...
    method InsertAsync (line 70) | public static async Task<bool> InsertAsync<TEntity>(this
    method InsertAsync (line 116) | public static async Task<int> InsertAsync<TEntity>(this
    method DeleteAsync (line 145) | public static async Task<int> DeleteAsync<TEntity>(this
    method SetAsync (line 175) | public static async Task<bool> SetAsync<TEntity>(this
    method SetAsync (line 206) | public static async Task<bool> SetAsync<TEntity>(this
    method IncrAsync (line 239) | public static async Task<bool> IncrAsync<TEntity, TValue>(this
    method GetAsync (line 272) | public static async Task<TEntity> GetAsync<TEntity>(this
    method GetListAsync (line 307) | public static async Task<IEnumerable<TEntity>> GetListAsync<TEntity>(this
    method GetOffsetsAsync (line 349) | public static async Task<IEnumerable<TEntity>> GetOffsetsAsync<TEntity...
    method CountAsync (line 387) | public static async Task<int> CountAsync<TEntity>(this

FILE: src/Overt.Core.Data/Extensions/Dapper.Extensions.cs
  class DapperExtensions (line 22) | public static partial class DapperExtensions
    method GetMainTableName (line 30) | public static string GetMainTableName(this Type entity)
    method GetTableName (line 47) | public static string GetTableName<TEntity>(this string val, Func<strin...
    method GetTableName (line 69) | public static string GetTableName<TEntity>(this TEntity entity, Func<s...
    method GetTableName (line 91) | public static string GetTableName<TEntity>(this Expression<Func<TEntit...
    method GetIdentityField (line 114) | public static PropertyInfo GetIdentityField(this Type type)
    method GetCustomFields (line 136) | public static List<PropertyInfo> GetCustomFields(this Type type)
    method IsExistTable (line 163) | public static bool IsExistTable(this IDbConnection connection, string ...
    method IsExistField (line 184) | public static bool IsExistField(this IDbConnection connection, string ...
    method Insert (line 207) | public static bool Insert<TEntity>(this
    method Insert (line 253) | public static int Insert<TEntity>(this
    method Delete (line 282) | public static int Delete<TEntity>(this
    method Set (line 312) | public static bool Set<TEntity>(this
    method Set (line 343) | public static bool Set<TEntity>(this
    method Incr (line 376) | public static bool Incr<TEntity, TValue>(this
    method Get (line 409) | public static TEntity Get<TEntity>(this
    method GetList (line 444) | public static IEnumerable<TEntity> GetList<TEntity>(this
    method GetOffsets (line 486) | public static IEnumerable<TEntity> GetOffsets<TEntity>(this
    method Count (line 524) | public static int Count<TEntity>(this
    method GetDbType (line 550) | internal static DatabaseType GetDbType(this IDbConnection connection)
    method GetValueFromExpression (line 586) | internal static object GetValueFromExpression<TEntity>(this PropertyIn...
    method GetBit (line 602) | [Obsolete("请使用TableNameFunc")]
    method GetSuffix (line 618) | [Obsolete("请使用TableNameFunc")]
    method GetSuffix (line 641) | [Obsolete("请使用TableNameFunc")]
    method GetSuffix (line 655) | [Obsolete("请使用TableNameFunc")]
    method GetSuffix (line 670) | [Obsolete("请使用TableNameFunc")]

FILE: src/Overt.Core.Data/Extensions/EntityDefinition.Extensions.cs
  class EntityDefinitionExtensions (line 12) | public static class EntityDefinitionExtensions
    method GetAttribute (line 22) | internal static TAttribute GetAttribute<TAttribute>(this Type entity) ...
    method GetAttribute (line 36) | internal static TAttribute GetAttribute<TAttribute>(this PropertyInfo ...
    method GetProperty (line 50) | internal static PropertyInfo GetProperty<TAttribute>(this Type entity)...
    method GetProperties (line 63) | internal static List<PropertyInfo> GetProperties<TAttribute>(this Type...
    method GetPropertyByAttribute (line 76) | internal static List<PropertyInfo> GetPropertyByAttribute<TAttribute>(...

FILE: src/Overt.Core.Data/Extensions/Expression.Extensions.cs
  class ExpressionExtensions (line 10) | public static class ExpressionExtensions
    method And (line 19) | public static Expression<Func<T, bool>> And<T>(this Expression<Func<T,...
    method Or (line 34) | public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, ...

FILE: src/Overt.Core.Data/Extensions/SqlAlias.Extensions.cs
  class SqlAliasExtensions (line 12) | public static class SqlAliasExtensions
    method ParamPrefix (line 19) | public static string ParamPrefix(this DatabaseType dbType)
    method ParamSql (line 43) | public static string ParamSql(this string columnName, SqlGenerate sqlG...
    method ParamSql (line 54) | public static string ParamSql(this string columnName, DatabaseType? db...
    method ParamValue (line 87) | public static string ParamValue(this string columnName, DatabaseType? ...
    method SelectLastIdentity (line 118) | public static string SelectLastIdentity(this DatabaseType dbType)
    method ExistTableSql (line 143) | public static string ExistTableSql(this DatabaseType dbType, string db...
    method ExistFieldSql (line 168) | public static string ExistFieldSql(this DatabaseType dbType, string db...

FILE: src/Overt.Core.Data/Extensions/Table.Extensions.cs
  class TableExtensions (line 11) | public static class TableExtensions
    method CheckTableIfMissingCreate (line 23) | public static bool CheckTableIfMissingCreate<T>(this IBaseRepository<T...

FILE: src/Overt.Core.Data/Params/OrderByField.cs
  class OrderByField (line 6) | public class OrderByField
    method OrderByField (line 21) | public OrderByField(string field, FieldSortType orderBy = FieldSortTyp...
    method Create (line 33) | public static OrderByField Create(string field, FieldSortType orderBy ...
  class OrderByFieldExtension (line 42) | public static class OrderByFieldExtension
    method OrderBy (line 49) | public static OrderByField OrderBy(this string field)
    method OrderByDesc (line 59) | public static OrderByField OrderByDesc(this string field)

FILE: src/Overt.Core.Data/Repository/BaseRepository.cs
  class BaseRepository (line 17) | public abstract class BaseRepository<TEntity> : PropertyAssist, IBaseRep...
    method BaseRepository (line 26) | public BaseRepository(IConfiguration configuration, string dbStoreKey ...
    method BaseRepository (line 35) | public BaseRepository(string dbStoreKey = "")
    method GetMainTableName (line 47) | public string GetMainTableName()
    method GetTableName (line 56) | public string GetTableName()
    method GetTableName (line 67) | [Obsolete("请使用GetTableName()")]
    method IsExistTable (line 80) | public bool IsExistTable(string tableName, bool isMaster = true)
    method IsExistField (line 98) | public bool IsExistField(string tableName, string fieldName, bool isMa...
    method Add (line 115) | public bool Add(TEntity entity, bool returnLastIdentity = false)
    method Add (line 133) | public bool Add(params TEntity[] entities)
    method Delete (line 151) | public bool Delete(Expression<Func<TEntity, bool>> expression)
    method Set (line 167) | public bool Set(TEntity entity, Expression<Func<TEntity, object>> fiel...
    method Set (line 187) | public bool Set(Expression<Func<object>> setExpress, Expression<Func<T...
    method Incr (line 208) | public bool Incr<TValue>(string field, TValue value, Expression<Func<T...
    method Get (line 228) | public TEntity Get(Expression<Func<TEntity, bool>> expression, Express...
    method GetList (line 251) | public IEnumerable<TEntity> GetList(
    method GetOffsets (line 280) | public IEnumerable<TEntity> GetOffsets(
    method Count (line 305) | public int Count(Expression<Func<TEntity, bool>> expression = null, bo...
    method IsExistTableAsync (line 323) | public async Task<bool> IsExistTableAsync(string tableName, bool isMas...
    method IsExistFieldAsync (line 341) | public async Task<bool> IsExistFieldAsync(string tableName, string fie...
    method AddAsync (line 358) | public async Task<bool> AddAsync(TEntity entity, bool returnLastIdenti...
    method AddAsync (line 376) | public async Task<bool> AddAsync(params TEntity[] entities)
    method DeleteAsync (line 394) | public async Task<bool> DeleteAsync(Expression<Func<TEntity, bool>> ex...
    method SetAsync (line 410) | public async Task<bool> SetAsync(TEntity entity, Expression<Func<TEnti...
    method SetAsync (line 430) | public async Task<bool> SetAsync(Expression<Func<object>> setExpress, ...
    method IncrAsync (line 450) | public async Task<bool> IncrAsync<TValue>(string field, TValue value, ...
    method GetAsync (line 470) | public async Task<TEntity> GetAsync(Expression<Func<TEntity, bool>> ex...
    method GetListAsync (line 493) | public async Task<IEnumerable<TEntity>> GetListAsync(
    method GetOffsetsAsync (line 522) | public async Task<IEnumerable<TEntity>> GetOffsetsAsync(
    method CountAsync (line 547) | public async Task<int> CountAsync(Expression<Func<TEntity, bool>> expr...
    method Execute (line 566) | protected virtual T Execute<T>(Func<IDbConnection, T> func, bool isMas...
    method Execute (line 584) | protected virtual async Task<T> Execute<T>(Func<IDbConnection, Task<T>...
    method OutSqlAction (line 601) | private void OutSqlAction(string sql)

FILE: src/Overt.Core.Data/Repository/PropertyAssist.cs
  class PropertyAssist (line 14) | public abstract class PropertyAssist : IPropertyAssist
    method PropertyAssist (line 29) | public PropertyAssist(IConfiguration configuration, string dbStoreKey ...
    method PropertyAssist (line 39) | public PropertyAssist(string dbStoreKey = "")
    method OpenConnection (line 56) | public virtual IDbConnection OpenConnection(bool isMaster = false)

FILE: src/core/Overt.Core.DataConsole/Program.cs
  class Program (line 11) | class Program
    method Program (line 14) | static Program()
    method Main (line 29) | static void Main(string[] args)
    method ExecuteMethodLongId (line 41) | private static void ExecuteMethodLongId()
    method ExecuteMethodLongIdAsync (line 73) | private static async Task ExecuteMethodLongIdAsync()
    method ExecuteMethodAsync (line 105) | private static async Task ExecuteMethodAsync()
    method ExecuteMethod (line 223) | private static void ExecuteMethod()

FILE: src/core/Overt.Core.Test/ApplicationTest.cs
  class ApplicationTest (line 9) | [TestClass]
    method ApplicationTest (line 12) | public ApplicationTest() : base()
    method DoSomethingTest (line 16) | [TestMethod]
    method DoSomeTest (line 53) | [TestMethod]
    method GetByIdsTest (line 62) | [TestMethod]

FILE: src/core/Overt.Core.Test/BaseTest.cs
  class BaseTest (line 8) | public class BaseTest
    method BaseTest (line 11) | public BaseTest()

FILE: src/core/Overt.User.Application/AutoMapperProfiles.cs
  class AutoMapperProfiles (line 7) | public class AutoMapperProfiles : Profile
    method AutoMapperProfiles (line 9) | public AutoMapperProfiles()

FILE: src/core/Overt.User.Application/Constracts/ISubDbUser2Service.cs
  type ISubDbUser2Service (line 6) | public interface ISubDbUser2Service
    method Add (line 8) | int Add(UserPostModel model);
    method Get (line 9) | UserModel Get(int userId, bool isMaster = false);
    method AddAsync (line 11) | Task<int> AddAsync(UserPostModel model);
    method GetAsync (line 13) | Task<UserModel> GetAsync(int userId, bool isMaster = false);

FILE: src/core/Overt.User.Application/Constracts/ISubDbUserService.cs
  type ISubDbUserService (line 10) | public interface ISubDbUserService
    method Add (line 13) | int Add(UserPostModel model);
    method Get (line 15) | UserModel Get(int userId, bool isMaster = false);
    method AddAsync (line 17) | Task<int> AddAsync(UserPostModel model);
    method GetAsync (line 19) | Task<UserModel> GetAsync(int userId, bool isMaster = false);

FILE: src/core/Overt.User.Application/Constracts/ISubUserService.cs
  type ISubUserService (line 10) | public interface ISubUserService
    method Add (line 12) | int Add(UserPostModel model);
    method Get (line 14) | UserModel Get(int userId, bool isMaster = false);
    method AddAsync (line 16) | Task<int> AddAsync(UserPostModel model);
    method GetAsync (line 18) | Task<UserModel> GetAsync(int userId, bool isMaster = false);

FILE: src/core/Overt.User.Application/Constracts/IUserLongIdService.cs
  type IUserLongIdService (line 10) | public interface IUserLongIdService
    method Get (line 13) | UserModel Get(long userId, bool isMaster = false);
    method GetList (line 15) | List<UserModel> GetList(List<long> userIds, bool isMaster = false);
    method Add (line 17) | long Add(UserPostModel model);
    method Add (line 19) | bool Add(params UserPostModel[] models);
    method GetAsync (line 23) | Task<UserModel> GetAsync(long userId, bool isMaster = false);
    method GetListAsync (line 25) | Task<List<UserModel>> GetListAsync(List<long> userIds, bool isMaster =...
    method AddAsync (line 27) | Task<long> AddAsync(UserPostModel model);
    method AddAsync (line 29) | Task<bool> AddAsync(params UserPostModel[] models);

FILE: src/core/Overt.User.Application/Constracts/IUserService.cs
  type IUserService (line 10) | public interface IUserService
    method Get (line 13) | UserModel Get(int userId, bool isMaster = false);
    method GetList (line 15) | List<UserModel> GetList(List<int> userIds, bool isMaster = false);
    method GetPage (line 17) | (int, List<UserModel>) GetPage(UserSearchModel model);
    method Add (line 19) | int Add(UserPostModel model);
    method Add (line 21) | bool Add(params UserPostModel[] models);
    method Update (line 23) | bool Update(int userId, bool isSex);
    method Delete (line 25) | bool Delete(int userId);
    method OtherSql (line 27) | List<string> OtherSql();
    method ExecuteInTransaction (line 33) | bool ExecuteInTransaction();
    method GetAsync (line 37) | Task<UserModel> GetAsync(int userId, bool isMaster = false);
    method GetListAsync (line 39) | Task<List<UserModel>> GetListAsync(List<int> userIds, bool isMaster = ...
    method GetPageAsync (line 41) | Task<(int, List<UserModel>)> GetPageAsync(UserSearchModel model);
    method AddAsync (line 43) | Task<int> AddAsync(UserPostModel model);
    method AddAsync (line 45) | Task<bool> AddAsync(params UserPostModel[] models);
    method UpdateAsync (line 47) | Task<bool> UpdateAsync(int userId, bool isSex);
    method DeleteAsync (line 49) | Task<bool> DeleteAsync(int userId);
    method OtherSqlAsync (line 51) | Task<List<string>> OtherSqlAsync();
    method ExecuteInTransactionAsync (line 57) | Task<bool> ExecuteInTransactionAsync();

FILE: src/core/Overt.User.Application/Extensions/ModelValidationExtensions.cs
  class ModelValidationExtensions (line 7) | public static class ModelValidationExtensions
    method IsValid (line 9) | public static bool IsValid(this object obj,out Exception exception)
    method Validate (line 28) | private static ValidationResult Validate(ValidationContext context)

FILE: src/core/Overt.User.Application/Models/UserModel.cs
  class UserModel (line 9) | public class UserModel

FILE: src/core/Overt.User.Application/Models/UserPostModel.cs
  class UserPostModel (line 10) | public class UserPostModel : IValidatableObject
    method Validate (line 28) | public virtual IEnumerable<ValidationResult> Validate(ValidationContex...

FILE: src/core/Overt.User.Application/Models/UserSearchModel.cs
  class UserSearchModel (line 12) | public class UserSearchModel
    method GetExpression (line 24) | public Expression<Func<UserEntity, bool>> GetExpression()
    method GetOrder (line 36) | public OrderByField[] GetOrder()

FILE: src/core/Overt.User.Application/ServiceCollectionExtensions.cs
  class ServiceCollectionExtensions (line 9) | public static class ServiceCollectionExtensions
    method AddApplicationDI (line 11) | public static void AddApplicationDI(this IServiceCollection services)

FILE: src/core/Overt.User.Application/Services/SubDbUser2Service.cs
  class SubDbUser2Service (line 11) | public class SubDbUser2Service : ISubDbUser2Service
    method SubDbUser2Service (line 15) | public SubDbUser2Service(
    method Add (line 23) | public int Add(UserPostModel model)
    method Get (line 37) | public UserModel Get(int userId, bool isMaster = false)
    method AddAsync (line 47) | public async Task<int> AddAsync(UserPostModel model)
    method GetAsync (line 61) | public async Task<UserModel> GetAsync(int userId, bool isMaster = false)

FILE: src/core/Overt.User.Application/Services/SubDbUserService.cs
  class SubDbUserService (line 11) | public class SubDbUserService : ISubDbUserService
    method SubDbUserService (line 15) | public SubDbUserService(
    method Add (line 23) | public int Add(UserPostModel model)
    method Get (line 36) | public UserModel Get(int userId, bool isMaster = false)
    method AddAsync (line 45) | public async Task<int> AddAsync(UserPostModel model)
    method GetAsync (line 58) | public async Task<UserModel> GetAsync(int userId, bool isMaster = false)

FILE: src/core/Overt.User.Application/Services/SubUserService.cs
  class SubUserService (line 15) | public class SubUserService : ISubUserService
    method SubUserService (line 19) | public SubUserService(
    method Add (line 26) | public int Add(UserPostModel model)
    method Get (line 42) | public UserModel Get(int userId, bool isMaster = false)
    method AddAsync (line 53) | public async Task<int> AddAsync(UserPostModel model)
    method GetAsync (line 69) | public async Task<UserModel> GetAsync(int userId, bool isMaster = false)

FILE: src/core/Overt.User.Application/Services/UserLongIdService.cs
  class UserLongIdService (line 13) | public class UserLongIdService : IUserLongIdService
    method UserLongIdService (line 17) | public UserLongIdService(
    method Add (line 26) | public long Add(UserPostModel model)
    method Add (line 46) | public bool Add(params UserPostModel[] models)
    method Delete (line 62) | public bool Delete(long userId)
    method Get (line 70) | public UserModel Get(long userId, bool isMaster = false)
    method GetList (line 79) | public List<UserModel> GetList(List<long> userIds, bool isMaster = false)
    method AddAsync (line 90) | public async Task<long> AddAsync(UserPostModel model)
    method AddAsync (line 103) | public async Task<bool> AddAsync(params UserPostModel[] models)
    method DeleteAsync (line 119) | public async Task<bool> DeleteAsync(long userId)
    method GetAsync (line 127) | public async Task<UserModel> GetAsync(long userId, bool isMaster = false)
    method GetListAsync (line 136) | public async Task<List<UserModel>> GetListAsync(List<long> userIds, bo...

FILE: src/core/Overt.User.Application/Services/UserService.cs
  class UserService (line 15) | public class UserService : IUserService
    method UserService (line 20) | public UserService(
    method Add (line 31) | public int Add(UserPostModel model)
    method Add (line 44) | public bool Add(params UserPostModel[] models)
    method Delete (line 60) | public bool Delete(int userId)
    method Get (line 68) | public UserModel Get(int userId, bool isMaster = false)
    method GetList (line 77) | public List<UserModel> GetList(List<int> userIds, bool isMaster = false)
    method GetPage (line 86) | public (int, List<UserModel>) GetPage(UserSearchModel model)
    method OtherSql (line 96) | public List<string> OtherSql()
    method Update (line 102) | public bool Update(int userId, bool isSex)
    method ExecuteInTransaction (line 130) | public bool ExecuteInTransaction()
    method AddAsync (line 171) | public async Task<int> AddAsync(UserPostModel model)
    method AddAsync (line 184) | public async Task<bool> AddAsync(params UserPostModel[] models)
    method DeleteAsync (line 200) | public async Task<bool> DeleteAsync(int userId)
    method GetAsync (line 208) | public async Task<UserModel> GetAsync(int userId, bool isMaster = false)
    method GetListAsync (line 217) | public async Task<List<UserModel>> GetListAsync(List<int> userIds, boo...
    method GetPageAsync (line 226) | public async Task<(int, List<UserModel>)> GetPageAsync(UserSearchModel...
    method OtherSqlAsync (line 236) | public async Task<List<string>> OtherSqlAsync()
    method UpdateAsync (line 242) | public async Task<bool> UpdateAsync(int userId, bool isSex)
    method ExecuteInTransactionAsync (line 272) | public async Task<bool> ExecuteInTransactionAsync()

FILE: src/core/Overt.User.Domain/Contracts/ISubDbUser2Repository.cs
  type ISubDbUser2Repository (line 7) | public interface ISubDbUser2Repository : IBaseRepository<SubDbUser2Entity>

FILE: src/core/Overt.User.Domain/Contracts/ISubDbUserRepository.cs
  type ISubDbUserRepository (line 6) | public interface ISubDbUserRepository : IBaseRepository<SubDbUserEntity>

FILE: src/core/Overt.User.Domain/Contracts/ISubUserRepository.cs
  type ISubUserRepository (line 10) | public interface ISubUserRepository : IBaseRepository<SubUserEntity>

FILE: src/core/Overt.User.Domain/Contracts/IUserLongIdRepository.cs
  type IUserLongIdRepository (line 8) | public interface IUserLongIdRepository : IBaseRepository<UserLongIdEntity>

FILE: src/core/Overt.User.Domain/Contracts/IUserRepository.cs
  type IUserRepository (line 8) | public interface IUserRepository : IBaseRepository<UserEntity>
    method OtherSql (line 14) | List<string> OtherSql();
    method OtherSqlAsync (line 20) | Task<List<string>> OtherSqlAsync();

FILE: src/core/Overt.User.Domain/Entities/SubDbUser2Entity.cs
  class SubDbUser2Entity (line 8) | [Table("User")]

FILE: src/core/Overt.User.Domain/Entities/SubDbUserEntity.cs
  class SubDbUserEntity (line 8) | [Table("User")]

FILE: src/core/Overt.User.Domain/Entities/SubUserEntity.cs
  class SubUserEntity (line 8) | [Table("User")]

FILE: src/core/Overt.User.Domain/Entities/UserEntity.cs
  class UserEntity (line 10) | [Table("User")]

FILE: src/core/Overt.User.Domain/Entities/UserLongIdEntity.cs
  class UserLongIdEntity (line 10) | [Table("UserLongId")]

FILE: src/core/Overt.User.Domain/Repositories/SubDbUser2Repository.cs
  class SubDbUser2Repository (line 13) | public class SubDbUser2Repository : BaseRepository<SubDbUser2Entity>, IS...
    method SubDbUser2Repository (line 15) | public SubDbUser2Repository(IConfiguration configuration)

FILE: src/core/Overt.User.Domain/Repositories/SubDbUserRepository.cs
  class SubDbUserRepository (line 13) | public class SubDbUserRepository : BaseRepository<SubDbUserEntity>, ISub...
    method SubDbUserRepository (line 15) | public SubDbUserRepository(IConfiguration configuration)

FILE: src/core/Overt.User.Domain/Repositories/SubUserRepository.cs
  class SubUserRepository (line 13) | public class SubUserRepository : BaseRepository<SubUserEntity>, ISubUser...
    method SubUserRepository (line 15) | public SubUserRepository(IConfiguration configuration) : base(configur...

FILE: src/core/Overt.User.Domain/Repositories/UserLongIdRepository.cs
  class UserLongIdRepository (line 13) | public class UserLongIdRepository : BaseRepository<UserLongIdEntity>, IU...
    method UserLongIdRepository (line 15) | public UserLongIdRepository(IConfiguration configuration)

FILE: src/core/Overt.User.Domain/Repositories/UserRepository.cs
  class UserRepository (line 13) | public class UserRepository : BaseRepository<UserEntity>, IUserRepository
    method UserRepository (line 15) | public UserRepository(IConfiguration configuration)
    method OtherSql (line 20) | public List<string> OtherSql()
    method OtherSqlAsync (line 32) | public async Task<List<string>> OtherSqlAsync()

FILE: src/core/Overt.User.Domain/ServiceCollectionExtensions.cs
  class ServiceCollectionExtensions (line 10) | public static class ServiceCollectionExtensions
    method AddDomainDI (line 12) | public static void AddDomainDI(this IServiceCollection services)

FILE: src/net46/Overt.Core.DataConsole/AutofacContainer.cs
  class AutofacContainer (line 12) | public class AutofacContainer
    method Register (line 16) | public static IContainer Register()

FILE: src/net46/Overt.Core.DataConsole/Program.cs
  class Program (line 11) | class Program
    method Main (line 13) | static void Main(string[] args)

FILE: src/net46/Overt.User.Application/AutoMapperProfiles.cs
  class AutoMapperProfiles (line 7) | public class AutoMapperProfiles : Profile
    method AutoMapperProfiles (line 9) | public AutoMapperProfiles()

FILE: src/net46/Overt.User.Application/AutofacExtensions.cs
  class AutofacExtensions (line 8) | public static class AutofacExtensions
    method AddApplicationDI (line 10) | public static void AddApplicationDI(this ContainerBuilder builder)

FILE: src/net46/Overt.User.Application/Constracts/ISubDbUser2Service.cs
  type ISubDbUser2Service (line 6) | public interface ISubDbUser2Service
    method Add (line 8) | int Add(UserPostModel model);
    method Get (line 9) | UserModel Get(int userId, bool isMaster = false);
    method AddAsync (line 11) | Task<int> AddAsync(UserPostModel model);
    method GetAsync (line 13) | Task<UserModel> GetAsync(int userId, bool isMaster = false);

FILE: src/net46/Overt.User.Application/Constracts/ISubDbUserService.cs
  type ISubDbUserService (line 10) | public interface ISubDbUserService
    method AddAsync (line 12) | Task<int> AddAsync(UserPostModel model);
    method GetAsync (line 14) | Task<UserModel> GetAsync(int userId, bool isMaster = false);

FILE: src/net46/Overt.User.Application/Constracts/ISubUserService.cs
  type ISubUserService (line 10) | public interface ISubUserService
    method AddAsync (line 12) | Task<int> AddAsync(UserPostModel model);
    method GetAsync (line 14) | Task<UserModel> GetAsync(int userId, bool isMaster = false);

FILE: src/net46/Overt.User.Application/Constracts/IUserService.cs
  type IUserService (line 10) | public interface IUserService
    method GetAsync (line 12) | Task<UserModel> GetAsync(int userId, bool isMaster = false);
    method GetListAsync (line 14) | Task<List<UserModel>> GetListAsync(List<int> userIds, bool isMaster = ...
    method GetPageAsync (line 16) | Task<(int, List<UserModel>)> GetPageAsync(UserSearchModel model);
    method AddAsync (line 18) | Task<int> AddAsync(UserPostModel model);
    method UpdateAsync (line 20) | Task<bool> UpdateAsync(int userId, bool isSex);
    method DeleteAsync (line 22) | Task<bool> DeleteAsync(int userId);
    method OtherSqlAsync (line 24) | Task<List<string>> OtherSqlAsync();
    method ExecuteInTransactionAsync (line 26) | Task<bool> ExecuteInTransactionAsync();

FILE: src/net46/Overt.User.Application/Extensions/ModelValidationExtensions.cs
  class ModelValidationExtensions (line 7) | public static class ModelValidationExtensions
    method IsValid (line 9) | public static bool IsValid(this object obj,out Exception exception)
    method Validate (line 28) | private static ValidationResult Validate(ValidationContext context)

FILE: src/net46/Overt.User.Application/Models/UserModel.cs
  class UserModel (line 9) | public class UserModel

FILE: src/net46/Overt.User.Application/Models/UserPostModel.cs
  class UserPostModel (line 10) | public class UserPostModel : IValidatableObject
    method Validate (line 28) | public virtual IEnumerable<ValidationResult> Validate(ValidationContex...

FILE: src/net46/Overt.User.Application/Models/UserSearchModel.cs
  class UserSearchModel (line 12) | public class UserSearchModel
    method GetExpression (line 24) | public Expression<Func<UserEntity, bool>> GetExpression()
    method GetOrder (line 36) | public OrderByField[] GetOrder()

FILE: src/net46/Overt.User.Application/Services/SubDbUser2Service.cs
  class SubDbUser2Service (line 11) | public class SubDbUser2Service : ISubDbUser2Service
    method SubDbUser2Service (line 15) | public SubDbUser2Service(
    method Add (line 23) | public int Add(UserPostModel model)
    method Get (line 37) | public UserModel Get(int userId, bool isMaster = false)
    method AddAsync (line 47) | public async Task<int> AddAsync(UserPostModel model)
    method GetAsync (line 61) | public async Task<UserModel> GetAsync(int userId, bool isMaster = false)

FILE: src/net46/Overt.User.Application/Services/SubDbUserService.cs
  class SubDbUserService (line 11) | public class SubDbUserService : ISubDbUserService
    method SubDbUserService (line 15) | public SubDbUserService(
    method AddAsync (line 23) | public async Task<int> AddAsync(UserPostModel model)
    method GetAsync (line 36) | public async Task<UserModel> GetAsync(int userId, bool isMaster = false)

FILE: src/net46/Overt.User.Application/Services/SubUserService.cs
  class SubUserService (line 15) | public class SubUserService : ISubUserService
    method SubUserService (line 19) | public SubUserService(
    method AddAsync (line 27) | public async Task<int> AddAsync(UserPostModel model)
    method GetAsync (line 43) | public async Task<UserModel> GetAsync(int userId, bool isMaster = false)

FILE: src/net46/Overt.User.Application/Services/UserService.cs
  class UserService (line 13) | public class UserService : IUserService
    method UserService (line 18) | public UserService(
    method AddAsync (line 28) | public async Task<int> AddAsync(UserPostModel model)
    method DeleteAsync (line 41) | public async Task<bool> DeleteAsync(int userId)
    method GetAsync (line 49) | public async Task<UserModel> GetAsync(int userId, bool isMaster = false)
    method GetListAsync (line 58) | public async Task<List<UserModel>> GetListAsync(List<int> userIds, boo...
    method GetPageAsync (line 67) | public async Task<(int, List<UserModel>)> GetPageAsync(UserSearchModel...
    method OtherSqlAsync (line 77) | public async Task<List<string>> OtherSqlAsync()
    method UpdateAsync (line 83) | public async Task<bool> UpdateAsync(int userId, bool isSex)
    method ExecuteInTransactionAsync (line 108) | public async Task<bool> ExecuteInTransactionAsync()

FILE: src/net46/Overt.User.Domain/AutofacExtensions.cs
  class AutofacExtensions (line 7) | public static class AutofacExtensions
    method AddDomainDI (line 9) | public static void AddDomainDI(this ContainerBuilder builder)

FILE: src/net46/Overt.User.Domain/Contracts/ISubDbUser2Repository.cs
  type ISubDbUser2Repository (line 7) | public interface ISubDbUser2Repository : IBaseRepository<SubDbUser2Entity>

FILE: src/net46/Overt.User.Domain/Contracts/ISubDbUserRepository.cs
  type ISubDbUserRepository (line 6) | public interface ISubDbUserRepository : IBaseRepository<SubDbUserEntity>

FILE: src/net46/Overt.User.Domain/Contracts/ISubUserRepository.cs
  type ISubUserRepository (line 10) | public interface ISubUserRepository : IBaseRepository<SubUserEntity>

FILE: src/net46/Overt.User.Domain/Contracts/IUserRepository.cs
  type IUserRepository (line 10) | public interface IUserRepository : IBaseRepository<UserEntity>
    method OtherSqlAsync (line 16) | Task<List<string>> OtherSqlAsync();

FILE: src/net46/Overt.User.Domain/Entities/SubDbUser2Entity.cs
  class SubDbUser2Entity (line 8) | [Table("User")]

FILE: src/net46/Overt.User.Domain/Entities/SubDbUserEntity.cs
  class SubDbUserEntity (line 8) | [Table("User")]

FILE: src/net46/Overt.User.Domain/Entities/SubUserEntity.cs
  class SubUserEntity (line 8) | [Table("User")]

FILE: src/net46/Overt.User.Domain/Entities/UserEntity.cs
  class UserEntity (line 9) | [Table("User")]

FILE: src/net46/Overt.User.Domain/Repositories/SubDbUser2Repository.cs
  class SubDbUser2Repository (line 9) | public class SubDbUser2Repository : BaseRepository<SubDbUser2Entity>, IS...
    method SubDbUser2Repository (line 11) | public SubDbUser2Repository()

FILE: src/net46/Overt.User.Domain/Repositories/SubDbUserRepository.cs
  class SubDbUserRepository (line 7) | public class SubDbUserRepository : BaseRepository<SubDbUserEntity>, ISub...
    method SubDbUserRepository (line 9) | public SubDbUserRepository()

FILE: src/net46/Overt.User.Domain/Repositories/SubUserRepository.cs
  class SubUserRepository (line 8) | public class SubUserRepository : BaseRepository<SubUserEntity>, ISubUser...
    method SubUserRepository (line 10) | public SubUserRepository() : base()

FILE: src/net46/Overt.User.Domain/Repositories/UserRepository.cs
  class UserRepository (line 11) | public class UserRepository : BaseRepository<UserEntity>, IUserRepository
    method UserRepository (line 13) | public UserRepository()
    method OtherSqlAsync (line 18) | public async Task<List<string>> OtherSqlAsync()
Condensed preview — 125 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (568K chars).
[
  {
    "path": ".gitattributes",
    "chars": 0,
    "preview": ""
  },
  {
    "path": ".gitignore",
    "chars": 422,
    "preview": "#\r\n#ignore thumbnails created by windows\r\nThumbs.db\r\n#Ignore files build by Visual Studio\r\n*.obj\r\n*.exe\r\n*.pdb\r\n*.user\r"
  },
  {
    "path": "README.md",
    "chars": 6770,
    "preview": "如有疑问可直接加QQ:2292709323,微信:yaofengv,联系\n\n# Overt.Core.Data\n\n### 项目层次说明\n\n> Overt.Core.Data v2.2.3 \n> 基于dapper封装的expression o"
  },
  {
    "path": "core-data.sln",
    "chars": 5031,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.27130.2027\nM"
  },
  {
    "path": "src/.vs/config/applicationhost.config",
    "chars": 79285,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!--\n\n    IIS configuration sections.\n\n    For schema documentation, see\n    %II"
  },
  {
    "path": "src/Overt.Core.Data/Attribute/SubmeterAttribute.cs",
    "chars": 362,
    "preview": "using System;\n\nnamespace Overt.Core.Data\n{\n    /// <summary>\n    /// 分表标识\n    /// </summary>\n    [Obsolete(\"请使用TableNam"
  },
  {
    "path": "src/Overt.Core.Data/Constants.cs",
    "chars": 270,
    "preview": "namespace Overt.Core.Data\n{\n    internal class Constants\n    {\n        public static class MSSQLVersion\n        {\n     "
  },
  {
    "path": "src/Overt.Core.Data/Contract/IBaseRepository.cs",
    "chars": 9512,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Data;\nusing System.Linq.Expressions;\nusing System.Threadin"
  },
  {
    "path": "src/Overt.Core.Data/Contract/IPropertyAssist.cs",
    "chars": 1312,
    "preview": "using System;\nusing System.Data;\n#if !ASP_NET_CORE\nusing System.Configuration;\n#endif\n\nnamespace Overt.Core.Data\n{\n    "
  },
  {
    "path": "src/Overt.Core.Data/DataContext/DataContext.cs",
    "chars": 4737,
    "preview": "#if ASP_NET_CORE\nusing Microsoft.Extensions.Configuration;\nusing System.IO;\n#endif\nusing MySql.Data.MySqlClient;\nusing "
  },
  {
    "path": "src/Overt.Core.Data/DataContext/DataSettings.cs",
    "chars": 5382,
    "preview": "using System;\nusing System.Text.RegularExpressions;\n#if ASP_NET_CORE\nusing Microsoft.Extensions.Configuration;\n#else\nus"
  },
  {
    "path": "src/Overt.Core.Data/Enums/DataCustomType.cs",
    "chars": 407,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
  },
  {
    "path": "src/Overt.Core.Data/Enums/DatabaseType.cs",
    "chars": 531,
    "preview": "namespace Overt.Core.Data\n{\n    /// <summary>\n    /// 数据库类型\n    /// </summary>\n\tpublic enum DatabaseType\n    {\n        "
  },
  {
    "path": "src/Overt.Core.Data/Enums/FieldSortType.cs",
    "chars": 279,
    "preview": "namespace Overt.Core.Data\n{\n    /// <summary>\n    /// 字段排序类型\n    /// </summary>\n    public enum FieldSortType\n    {\n   "
  },
  {
    "path": "src/Overt.Core.Data/Expressions/ExpressionHelper.cs",
    "chars": 3044,
    "preview": "using System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace Overt.Core.Data.Expressions\n{\n    /// <summ"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/Extensions/Expression.Extensions.cs",
    "chars": 9261,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressi"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/Resolve/Basic/BaseSqlExpression.cs",
    "chars": 8205,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace Overt.Core.Data.Expressions\n{"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/Resolve/Basic/ISqlExpression.cs",
    "chars": 2734,
    "preview": "using System.Linq.Expressions;\n\nnamespace Overt.Core.Data.Expressions\n{\n    /// <summary>\n    /// interface\n    /// </s"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/Resolve/BinarySqlExpression.cs",
    "chars": 4454,
    "preview": "using System;\nusing System.Linq.Expressions;\n\nnamespace Overt.Core.Data.Expressions\n{\n    class BinarySqlExpression : B"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/Resolve/ConstantSqlExpression.cs",
    "chars": 1024,
    "preview": "using System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace Overt.Core.Data.Expressions\n{\n    class Con"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/Resolve/LambdaSqlExpression.cs",
    "chars": 2998,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\nusing System.Text;\n\nnamespace Overt.Core"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/Resolve/ListInitSqlExpression.cs",
    "chars": 1438,
    "preview": "using System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace Overt.Core.Data.Expressions\n{\n    class Lis"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/Resolve/MemberSqlExpression.cs",
    "chars": 6496,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Linq.Expressi"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/Resolve/MethodCallSqlExpression.cs",
    "chars": 5481,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace Overt.Core.Data.Expressions\n{"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/Resolve/NewArraySqlExpression.cs",
    "chars": 632,
    "preview": "using System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace Overt.Core.Data.Expressions\n{\n    class New"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/Resolve/NewSqlExpression.cs",
    "chars": 1615,
    "preview": "using System.Linq.Expressions;\nusing System.Reflection;\n\nnamespace Overt.Core.Data.Expressions\n{\n    class NewSqlExpres"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/Resolve/UnarySqlExpression.cs",
    "chars": 2724,
    "preview": "using System.Linq.Expressions;\n\nnamespace Overt.Core.Data.Expressions\n{\n    class UnarySqlExpression : BaseSqlExpressio"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/SqlExpression.cs",
    "chars": 5282,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq.Expressions;\n\nnamespace Overt.Core.Data.Expressions\n{"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/SqlExpressionCompiler.cs",
    "chars": 1626,
    "preview": "using System;\nusing System.Linq.Expressions;\nusing static Overt.Core.Data.Expressions.SqlExpressionFingerprint;\n\nnamesp"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/SqlExpressionCore.cs",
    "chars": 13025,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing S"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/SqlExpressionFingerprint.cs",
    "chars": 34095,
    "preview": "using System;\nusing System.Collections;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing Sy"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/SqlExpressionProvider.cs",
    "chars": 5999,
    "preview": "using System;\nusing System.Linq.Expressions;\n\nnamespace Overt.Core.Data.Expressions\n{\n    internal class SqlExpressionP"
  },
  {
    "path": "src/Overt.Core.Data/Expressions/SqlExpression/SqlGenerate.cs",
    "chars": 4537,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace Overt.Core.Data.Expres"
  },
  {
    "path": "src/Overt.Core.Data/Extensions/Dapper.Async.Extensions.cs",
    "chars": 16893,
    "preview": "using Dapper;\nusing Overt.Core.Data.Expressions;\nusing System;\nusing System.Collections.Generic;\nusing System.Component"
  },
  {
    "path": "src/Overt.Core.Data/Extensions/Dapper.Extensions.cs",
    "chars": 26441,
    "preview": "using Dapper;\nusing MySql.Data.MySqlClient;\nusing Overt.Core.Data.Expressions;\nusing System;\nusing System.Collections.C"
  },
  {
    "path": "src/Overt.Core.Data/Extensions/EntityDefinition.Extensions.cs",
    "chars": 3168,
    "preview": "using System;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Re"
  },
  {
    "path": "src/Overt.Core.Data/Extensions/Expression.Extensions.cs",
    "chars": 1400,
    "preview": "using System;\nusing System.Linq;\nusing System.Linq.Expressions;\n\nnamespace Overt.Core.Data\n{\n    /// <summary>\n    /// "
  },
  {
    "path": "src/Overt.Core.Data/Extensions/SqlAlias.Extensions.cs",
    "chars": 7259,
    "preview": "using Overt.Core.Data.Expressions;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing"
  },
  {
    "path": "src/Overt.Core.Data/Extensions/Table.Extensions.cs",
    "chars": 2229,
    "preview": "using Dapper;\nusing System;\nusing System.Collections.Concurrent;\nusing System.Transactions;\n\nnamespace Overt.Core.Data\n"
  },
  {
    "path": "src/Overt.Core.Data/Overt.Core.Data.csproj",
    "chars": 2355,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>net461;netstandard2.0</TargetFrameworks>\n   "
  },
  {
    "path": "src/Overt.Core.Data/Overt.Core.Data.xml",
    "chars": 87350,
    "preview": "<?xml version=\"1.0\"?>\n<doc>\n    <assembly>\n        <name>Overt.Core.Data</name>\n    </assembly>\n    <members>\n        <m"
  },
  {
    "path": "src/Overt.Core.Data/Params/OrderByField.cs",
    "chars": 1713,
    "preview": "namespace Overt.Core.Data\n{\n    /// <summary>\n    /// 排序字段对象\n    /// </summary>\n    public class OrderByField\n    {\n   "
  },
  {
    "path": "src/Overt.Core.Data/Repository/BaseRepository.cs",
    "chars": 21809,
    "preview": "#if ASP_NET_CORE\nusing Microsoft.Extensions.Configuration;\n#endif\nusing Overt.Core.Data.Expressions;\nusing System;\nusin"
  },
  {
    "path": "src/Overt.Core.Data/Repository/PropertyAssist.cs",
    "chars": 2600,
    "preview": "using System;\nusing System.Data;\n#if ASP_NET_CORE\nusing Microsoft.Extensions.Configuration;\n#else\nusing System.Configur"
  },
  {
    "path": "src/core/Overt.Core.DataConsole/Overt.Core.DataConsole.csproj",
    "chars": 1296,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>netcoreapp2.0"
  },
  {
    "path": "src/core/Overt.Core.DataConsole/Program.cs",
    "chars": 11022,
    "preview": "using Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing System;\nusing Overt.Use"
  },
  {
    "path": "src/core/Overt.Core.DataConsole/appsettings.json",
    "chars": 1029,
    "preview": "{\n  \"ConnectionStrings\": {\n    \"master\": \"Data Source=127.0.0.1;Initial Catalog=TestDb;Persist Security Info=True;User I"
  },
  {
    "path": "src/core/Overt.Core.Test/ApplicationTest.cs",
    "chars": 2008,
    "preview": "using Microsoft.VisualStudio.TestTools.UnitTesting;\nusing Overt.User.Application.Constracts;\nusing Microsoft.Extensions."
  },
  {
    "path": "src/core/Overt.Core.Test/BaseTest.cs",
    "chars": 739,
    "preview": "using Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Overt.User.Application;"
  },
  {
    "path": "src/core/Overt.Core.Test/Overt.Core.Test.csproj",
    "chars": 1402,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.0</TargetFramework>\n\n    <IsPackab"
  },
  {
    "path": "src/core/Overt.Core.Test/appsettings.json",
    "chars": 168,
    "preview": "{\n  \"ConnectionStrings\": {\n    \"ss.master\": \"Data Source=127.0.0.1;Initial Catalog=TestDb;Persist Security Info=True;Use"
  },
  {
    "path": "src/core/Overt.User.Application/AutoMapperProfiles.cs",
    "chars": 881,
    "preview": "using AutoMapper;\nusing Overt.User.Application.Models;\nusing Overt.User.Domain.Entities;\n\nnamespace Overt.User.Applicat"
  },
  {
    "path": "src/core/Overt.User.Application/Constracts/ISubDbUser2Service.cs",
    "chars": 385,
    "preview": "using Overt.User.Application.Models;\nusing System.Threading.Tasks;\n\nnamespace Overt.User.Application.Constracts\n{\n    p"
  },
  {
    "path": "src/core/Overt.User.Application/Constracts/ISubDbUserService.cs",
    "chars": 487,
    "preview": "using Overt.User.Application.Models;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System.Collections.Generic;\n"
  },
  {
    "path": "src/core/Overt.User.Application/Constracts/ISubUserService.cs",
    "chars": 484,
    "preview": "using Overt.User.Application.Models;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System.Collections.Generic;\n"
  },
  {
    "path": "src/core/Overt.User.Application/Constracts/IUserLongIdService.cs",
    "chars": 860,
    "preview": "using Overt.User.Application.Models;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System.Collections.Generic;\n"
  },
  {
    "path": "src/core/Overt.User.Application/Constracts/IUserService.cs",
    "chars": 1527,
    "preview": "using Overt.User.Application.Models;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System.Collections.Generic;\n"
  },
  {
    "path": "src/core/Overt.User.Application/Extensions/ModelValidationExtensions.cs",
    "chars": 1877,
    "preview": "using System;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\n\nnamespace Overt.User.Application\n{\n    p"
  },
  {
    "path": "src/core/Overt.User.Application/Models/UserModel.cs",
    "chars": 621,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentMode"
  },
  {
    "path": "src/core/Overt.User.Application/Models/UserPostModel.cs",
    "chars": 1157,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing S"
  },
  {
    "path": "src/core/Overt.User.Application/Models/UserSearchModel.cs",
    "chars": 1217,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.L"
  },
  {
    "path": "src/core/Overt.User.Application/Overt.User.Application.csproj",
    "chars": 720,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.0</TargetFramework>\n  </PropertyGr"
  },
  {
    "path": "src/core/Overt.User.Application/ServiceCollectionExtensions.cs",
    "chars": 807,
    "preview": "using AutoMapper;\nusing Microsoft.Extensions.DependencyInjection;\nusing Overt.User.Application.Constracts;\nusing Overt."
  },
  {
    "path": "src/core/Overt.User.Application/Services/SubDbUser2Service.cs",
    "chars": 2291,
    "preview": "using AutoMapper;\nusing Overt.User.Application.Constracts;\nusing Overt.User.Application.Models;\nusing Overt.User.Domain"
  },
  {
    "path": "src/core/Overt.User.Application/Services/SubDbUserService.cs",
    "chars": 2072,
    "preview": "using AutoMapper;\nusing Overt.User.Application.Constracts;\nusing Overt.User.Application.Models;\nusing Overt.User.Domain"
  },
  {
    "path": "src/core/Overt.User.Application/Services/SubUserService.cs",
    "chars": 2438,
    "preview": "using AutoMapper;\nusing Overt.User.Application.Constracts;\nusing Overt.User.Application.Models;\nusing Overt.User.Domain"
  },
  {
    "path": "src/core/Overt.User.Application/Services/UserLongIdService.cs",
    "chars": 4808,
    "preview": "using AutoMapper;\nusing Overt.User.Application.Constracts;\nusing Overt.User.Application.Models;\nusing Overt.User.Domain"
  },
  {
    "path": "src/core/Overt.User.Application/Services/UserService.cs",
    "chars": 10935,
    "preview": "using AutoMapper;\nusing Overt.User.Application.Constracts;\nusing Overt.User.Application.Models;\nusing Overt.User.Domain"
  },
  {
    "path": "src/core/Overt.User.Domain/Contracts/ISubDbUser2Repository.cs",
    "chars": 312,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Entities;\nusing System;\n\nnamespace Overt.User.Domain.Contracts\n{\n    pub"
  },
  {
    "path": "src/core/Overt.User.Domain/Contracts/ISubDbUserRepository.cs",
    "chars": 190,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Entities;\n\nnamespace Overt.User.Domain.Contracts\n{\n    public interface "
  },
  {
    "path": "src/core/Overt.User.Domain/Contracts/ISubUserRepository.cs",
    "chars": 438,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.T"
  },
  {
    "path": "src/core/Overt.User.Domain/Contracts/IUserLongIdRepository.cs",
    "chars": 256,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Entities;\nusing System.Collections.Generic;\nusing System.Threading.Tasks"
  },
  {
    "path": "src/core/Overt.User.Domain/Contracts/IUserRepository.cs",
    "chars": 552,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Entities;\nusing System.Collections.Generic;\nusing System.Threading.Tasks"
  },
  {
    "path": "src/core/Overt.User.Domain/Entities/SubDbUser2Entity.cs",
    "chars": 858,
    "preview": "using Overt.Core.Data;\nusing System;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentModel.DataAnnot"
  },
  {
    "path": "src/core/Overt.User.Domain/Entities/SubDbUserEntity.cs",
    "chars": 857,
    "preview": "using Overt.Core.Data;\nusing System;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentModel.DataAnnot"
  },
  {
    "path": "src/core/Overt.User.Domain/Entities/SubUserEntity.cs",
    "chars": 855,
    "preview": "using Overt.Core.Data;\nusing System;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentModel.DataAnnot"
  },
  {
    "path": "src/core/Overt.User.Domain/Entities/UserEntity.cs",
    "chars": 825,
    "preview": "using Overt.Core.Data;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusi"
  },
  {
    "path": "src/core/Overt.User.Domain/Entities/UserLongIdEntity.cs",
    "chars": 838,
    "preview": "using Overt.Core.Data;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusi"
  },
  {
    "path": "src/core/Overt.User.Domain/Overt.User.Domain.csproj",
    "chars": 370,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp2.0</TargetFramework>\n  </PropertyG"
  },
  {
    "path": "src/core/Overt.User.Domain/Repositories/SubDbUser2Repository.cs",
    "chars": 1208,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Contracts;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System."
  },
  {
    "path": "src/core/Overt.User.Domain/Repositories/SubDbUserRepository.cs",
    "chars": 525,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Contracts;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System."
  },
  {
    "path": "src/core/Overt.User.Domain/Repositories/SubUserRepository.cs",
    "chars": 1568,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Contracts;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System."
  },
  {
    "path": "src/core/Overt.User.Domain/Repositories/UserLongIdRepository.cs",
    "chars": 582,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Contracts;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System."
  },
  {
    "path": "src/core/Overt.User.Domain/Repositories/UserRepository.cs",
    "chars": 1369,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Contracts;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System."
  },
  {
    "path": "src/core/Overt.User.Domain/ServiceCollectionExtensions.cs",
    "chars": 769,
    "preview": "using Microsoft.Extensions.DependencyInjection;\nusing Overt.User.Domain.Contracts;\nusing Overt.User.Domain.Repositories"
  },
  {
    "path": "src/net46/Overt.Core.DataConsole/App.config",
    "chars": 2651,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <configSections>\n    <!-- For more information on Entity Framew"
  },
  {
    "path": "src/net46/Overt.Core.DataConsole/AutofacContainer.cs",
    "chars": 1082,
    "preview": "using Autofac;\nusing AutoMapper;\nusing Overt.User.Application;\nusing System;\nusing System.Collections.Generic;\nusing Sy"
  },
  {
    "path": "src/net46/Overt.Core.DataConsole/Overt.Core.DataConsole.csproj",
    "chars": 7218,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "src/net46/Overt.Core.DataConsole/Program.cs",
    "chars": 3458,
    "preview": "using Overt.User.Application.Constracts;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Syste"
  },
  {
    "path": "src/net46/Overt.Core.DataConsole/Properties/AssemblyInfo.cs",
    "chars": 983,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下"
  },
  {
    "path": "src/net46/Overt.Core.DataConsole/packages.config",
    "chars": 806,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Autofac\" version=\"4.8.1\" targetFramework=\"net46\" />\n  "
  },
  {
    "path": "src/net46/Overt.User.Application/AutoMapperProfiles.cs",
    "chars": 769,
    "preview": "using AutoMapper;\nusing Overt.User.Application.Models;\nusing Overt.User.Domain.Entities;\n\nnamespace Overt.User.Applicat"
  },
  {
    "path": "src/net46/Overt.User.Application/AutofacExtensions.cs",
    "chars": 643,
    "preview": "using Autofac;\nusing Overt.User.Application.Constracts;\nusing Overt.User.Application.Services;\nusing Overt.User.Domain;"
  },
  {
    "path": "src/net46/Overt.User.Application/Constracts/ISubDbUser2Service.cs",
    "chars": 385,
    "preview": "using Overt.User.Application.Models;\nusing System.Threading.Tasks;\n\nnamespace Overt.User.Application.Constracts\n{\n    p"
  },
  {
    "path": "src/net46/Overt.User.Application/Constracts/ISubDbUserService.cs",
    "chars": 388,
    "preview": "using Overt.User.Application.Models;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System.Collections.Generic;\n"
  },
  {
    "path": "src/net46/Overt.User.Application/Constracts/ISubUserService.cs",
    "chars": 386,
    "preview": "using Overt.User.Application.Models;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System.Collections.Generic;\n"
  },
  {
    "path": "src/net46/Overt.User.Application/Constracts/IUserService.cs",
    "chars": 741,
    "preview": "using Overt.User.Application.Models;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System.Collections.Generic;\n"
  },
  {
    "path": "src/net46/Overt.User.Application/Extensions/ModelValidationExtensions.cs",
    "chars": 1877,
    "preview": "using System;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\n\nnamespace Overt.User.Application\n{\n    p"
  },
  {
    "path": "src/net46/Overt.User.Application/Models/UserModel.cs",
    "chars": 621,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentMode"
  },
  {
    "path": "src/net46/Overt.User.Application/Models/UserPostModel.cs",
    "chars": 1157,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing S"
  },
  {
    "path": "src/net46/Overt.User.Application/Models/UserSearchModel.cs",
    "chars": 1217,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.L"
  },
  {
    "path": "src/net46/Overt.User.Application/Overt.User.Application.csproj",
    "chars": 4935,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "src/net46/Overt.User.Application/Properties/AssemblyInfo.cs",
    "chars": 980,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下"
  },
  {
    "path": "src/net46/Overt.User.Application/Services/SubDbUser2Service.cs",
    "chars": 2291,
    "preview": "using AutoMapper;\nusing Overt.User.Application.Constracts;\nusing Overt.User.Application.Models;\nusing Overt.User.Domain"
  },
  {
    "path": "src/net46/Overt.User.Application/Services/SubDbUserService.cs",
    "chars": 1356,
    "preview": "using AutoMapper;\nusing Overt.User.Application.Constracts;\nusing Overt.User.Application.Models;\nusing Overt.User.Domain"
  },
  {
    "path": "src/net46/Overt.User.Application/Services/SubUserService.cs",
    "chars": 1584,
    "preview": "using AutoMapper;\nusing Overt.User.Application.Constracts;\nusing Overt.User.Application.Models;\nusing Overt.User.Domain"
  },
  {
    "path": "src/net46/Overt.User.Application/Services/UserService.cs",
    "chars": 5151,
    "preview": "using AutoMapper;\nusing Overt.User.Application.Constracts;\nusing Overt.User.Application.Models;\nusing Overt.User.Domain"
  },
  {
    "path": "src/net46/Overt.User.Application/packages.config",
    "chars": 377,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Autofac\" version=\"4.8.1\" targetFramework=\"net46\" />\n  "
  },
  {
    "path": "src/net46/Overt.User.Domain/AutofacExtensions.cs",
    "chars": 590,
    "preview": "using Autofac;\nusing Overt.User.Domain.Contracts;\nusing Overt.User.Domain.Repositories;\n\nnamespace Overt.User.Domain\n{\n"
  },
  {
    "path": "src/net46/Overt.User.Domain/Contracts/ISubDbUser2Repository.cs",
    "chars": 312,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Entities;\nusing System;\n\nnamespace Overt.User.Domain.Contracts\n{\n    pub"
  },
  {
    "path": "src/net46/Overt.User.Domain/Contracts/ISubDbUserRepository.cs",
    "chars": 190,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Entities;\n\nnamespace Overt.User.Domain.Contracts\n{\n    public interface "
  },
  {
    "path": "src/net46/Overt.User.Domain/Contracts/ISubUserRepository.cs",
    "chars": 438,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.T"
  },
  {
    "path": "src/net46/Overt.User.Domain/Contracts/IUserRepository.cs",
    "chars": 436,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System.Collections.Generic;\nusing System.T"
  },
  {
    "path": "src/net46/Overt.User.Domain/Entities/SubDbUser2Entity.cs",
    "chars": 858,
    "preview": "using Overt.Core.Data;\nusing System;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentModel.DataAnnot"
  },
  {
    "path": "src/net46/Overt.User.Domain/Entities/SubDbUserEntity.cs",
    "chars": 762,
    "preview": "using Overt.Core.Data;\nusing System;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentModel.DataAnnot"
  },
  {
    "path": "src/net46/Overt.User.Domain/Entities/SubUserEntity.cs",
    "chars": 760,
    "preview": "using Overt.Core.Data;\nusing System;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentModel.DataAnnot"
  },
  {
    "path": "src/net46/Overt.User.Domain/Entities/UserEntity.cs",
    "chars": 706,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.ComponentMode"
  },
  {
    "path": "src/net46/Overt.User.Domain/Overt.User.Domain.csproj",
    "chars": 3728,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "src/net46/Overt.User.Domain/Properties/AssemblyInfo.cs",
    "chars": 970,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的一般信息由以下"
  },
  {
    "path": "src/net46/Overt.User.Domain/Repositories/SubDbUser2Repository.cs",
    "chars": 1103,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Contracts;\nusing Overt.User.Domain.Entities;\nusing System;\nusing System."
  },
  {
    "path": "src/net46/Overt.User.Domain/Repositories/SubDbUserRepository.cs",
    "chars": 329,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Contracts;\nusing Overt.User.Domain.Entities;\n\nnamespace Overt.User.Domai"
  },
  {
    "path": "src/net46/Overt.User.Domain/Repositories/SubUserRepository.cs",
    "chars": 1337,
    "preview": "using Overt.Core.Data;\nusing Overt.User.Domain.Contracts;\nusing Overt.User.Domain.Entities;\nusing System;\n\nnamespace Ov"
  },
  {
    "path": "src/net46/Overt.User.Domain/Repositories/UserRepository.cs",
    "chars": 890,
    "preview": "using Dapper;\nusing Overt.Core.Data;\nusing Overt.User.Domain.Contracts;\nusing Overt.User.Domain.Entities;\nusing System."
  },
  {
    "path": "src/net46/Overt.User.Domain/packages.config",
    "chars": 197,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Autofac\" version=\"4.8.1\" targetFramework=\"net46\" />\n  "
  }
]

// ... and 1 more files (download for full content)

About this extraction

This page contains the full source code of the overtly/core-data GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 125 files (508.3 KB), approximately 122.0k tokens, and a symbol index with 659 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!