该项目为ElasticSearch的webapi项目, 基于.NET CORE 3.1 和NEST 7.2.1,低于7.X的,请自行改写DAL层即可, 项目面向接口编程,鉴于es数据逻辑一般不会太复杂,简化了整个项目,项目中使用Scrutor自动扫描注入
方便理解整个项目的情况,项目中基于一些约定,约定大于配置,违反该约定可能会出错
- 服务实现类统一命名方式:XXXServiceImpl
- 服务接口统一命名方式:IXXXService
- 实体统一命名方式:XXXEntity
- 条件查询统一命名方式:BaseXXXCondition
- DAL实现类统一命名方式:XXXRepositoryImpl
- IDAL接口统一命名方式:IXXXRepository
- 索引对应的默认名称,别名,模板名称,统一在实体DemoEntity的特性上设置如下:
- [ElasticsearchIndex(DefaultIndexName = "demo", Alias = "demo_alias", TemplateName = "demo_template")]
- [ElasticsearchType(RelationName = "_doc", IdProperty = "id")]
- 项目根据模块分组,api同时也根据模板分组,不分组可能会出现api swagger不展示
ElasticSearch7Template
- .template.config (.NET CORE 脚手架模板)
- .editorconfig (代码规范文件,可删除,不影响使用)
- ElasticSearch7Template (api)
- ElasticSearch7Template.BLL (业务逻辑)
- ElasticSearch7Template.BLL.MediatR (业务逻辑中介通用层基于MediatR,此处暂时没用到)
- ElasticSearch7Template.Core(公共核心类)
- ElasticSearch7Template.DAL (仓储层)
- ElasticSearch7Template.Entity(实体)
- ElasticSearch7Template.IBLL (业务接口)
- ElasticSearch7Template.IDAL (仓储接口)
- ElasticSearch7Template.Model (model层)
- ElasticSearch7Template.Utility (工具类)
项目包含一个demo例子。
- 类的命名,api的实际编写其实基于表结构自动生成,如表名demo
- ibll接口为
- IQueryDemoService 包含增删改
- ICommandDemoService,只包含包含查询
- bll接口实现为 (统一后缀Impl)
- QueryDemoServiceImpl 包含增删改
- CommandDemoServiceImpl,只包含包含查询
- IDAL接口为:
- IDemoRepository
- DAL接口实现为:
- DemoRepositoryImpl
- Model对应的查询条件类为:
- BaseDemoCondition
- Entity对应的类:
- DemoEntity
- PartOfDemoEntity
- controller对应的类为:
- DemoController es数据接口controller
- DemoIndexController es索引文件接口controller
- DemoTemplateController es模板文件接口controller
- ibll接口为
- 依赖注入:项目中使用Scrutor自动扫描注入(详情见Core项目IAutoInject,api项目下RegisterService文件),以下为瞄点
- IAutoInject,IScopedAutoInject 自动注入扫描点默认为Scoped
- ISingletonAutoInject 自动注入接口和实现Singleton类型
- ITransientAutoInject 自动注入接口和实现Transient类型
- ISelfScopedAutoInject 自动注入自身Scoped类型
- ISelfSingletonAutoInject 自动注入自身Singleton类型
- ISelfTransientAutoInject 自动注入自身Transient类型
项目配备了dotnet cli的模板功能,可以直接安装进行替换,省去修改命名空间等繁琐操作,详情了解.template.config 文件,
-
下载后,进入目录,和(.template.config同级)
-
运行 dotnet new -i . (-i 后面有个 点“.”) 安装模板
-
安装成功后运行dotnet new,可看见安装的模板 myesapi
-
进入项目目录 dotnet new myesapi XXX,创建新的es api项目
- XXX 为你的项目名称,如 dotnet new myesapi test,会创建一个项目目录test,内部包含,整个项目的源码
- ElasticSearch7Template 会被全局替换为test,包括文件夹的名称
-
修改appsettings下的ElasticSearchConfig得 ClusterNodeUrlHosts值配置es
-
dotnet build 或者dotnet run 即可
目前只支持从SqlServer生成,其他库暂无支持
-
安装, 下载地址:链接:https://pan.baidu.com/s/1ZpfDX8igJ6xOu3z_f_U7pg 提取码:6yr0
-
登陆 3.左侧选择数据库,
-
命名空间前缀:
- 替换ElasticSearch7Template,项目名称如test1
-
模块名称
- 简单项目可不填默认模块名称basic
- ,如果业务复杂拆分多个BLL项目,如test.bll.user,此处填写user即可,bll,ibll会对应生成到test.bll.user,test.Ibll.user文件夹中
- 也可以不拆分多个项目,只在BLL下拆成多个文件夹,下面是否拆分bll不勾选即可
-
实体
- 实体名称,不带entity,如,输入demo,实际生成的为demoEntity
-
平台类型
- 选ELASTICSEARCH,
-
工作目录
- 项目目录
-
是否拆分BLL
- 如果不存在多个BLL项目,此处不勾选即可
-
是否生成控制器代码
- 生成controller,如果不希望对外公开接口,不勾选即可
生成完成后,直接运行即可``
- editorconfig 为代码规范文件,各人不一样,我个人采用比较强制的规范,不符合会报错,可以直接删除。
- api 只是初级版,针对es中的复杂场景,请自行拓展。
- 项目提供了基于sql的查询SimpleSQLQuery查询,请自行根据es的语法编写,针对Object,Nested 类型没有提供支持。
- 代码生成器,部分功能不属于elasticsearch,属于另外个模板项目,请不要超出上述的使用方式,可能生成的代码会报错,个人暂时不会去修改这个。
- GenerateCode.rar 代码生成器包,下载安装即可,基于.NET Framework 4.6.1。
- 代码可能存在bug,请提交pr,thanks。
暂时没有 -_-
MIT