From 31ac7eedd009ad4bd151e9fc64c48b63604d984c Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 12 Aug 2019 10:07:06 +0800 Subject: [PATCH 1/7] Fix #1613 the namespaces of the module template AddEmbedded method. --- .../MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs index 7ee5bf4b00..747978bc88 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Web/MyProjectNameWebModule.cs @@ -34,7 +34,7 @@ namespace MyCompanyName.MyProjectName.Web Configure(options => { - options.FileSets.AddEmbedded("MyCompanyName.MyProjectName"); + options.FileSets.AddEmbedded("MyCompanyName.MyProjectName.Web"); }); Configure(options => From d27e46afdea42a4b6fdfc6ed5f45d26cc7135f1c Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 12 Aug 2019 13:48:08 +0800 Subject: [PATCH 2/7] Correct the mongoDb connection string. --- .../MongoDb/BookStoreMongoDbTestModule.cs | 5 +++-- .../MongoDB/MyProjectNameMongoDbTestModule.cs | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/MongoDb/BookStoreMongoDbTestModule.cs b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/MongoDb/BookStoreMongoDbTestModule.cs index 99346ca8cf..c59bf2452c 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/MongoDb/BookStoreMongoDbTestModule.cs +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/test/Acme.BookStore.MongoDB.Tests/MongoDb/BookStoreMongoDbTestModule.cs @@ -1,4 +1,5 @@ -using Mongo2Go; +using System; +using Mongo2Go; using Volo.Abp; using Volo.Abp.Data; using Volo.Abp.Modularity; @@ -19,7 +20,7 @@ namespace Acme.BookStore.MongoDB Configure(options => { - options.ConnectionStrings.Default = _mongoDbRunner.ConnectionString + "|BookStore"; + options.ConnectionStrings.Default = _mongoDbRunner.ConnectionString.EnsureEndsWith('/') + "BookStore"; }); } diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/MyProjectNameMongoDbTestModule.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/MyProjectNameMongoDbTestModule.cs index 9da609fd4e..71be56844c 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/MyProjectNameMongoDbTestModule.cs +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.MongoDB.Tests/MongoDB/MyProjectNameMongoDbTestModule.cs @@ -1,4 +1,5 @@ -using Mongo2Go; +using System; +using Mongo2Go; using Volo.Abp; using Volo.Abp.Data; using Volo.Abp.Modularity; @@ -19,7 +20,7 @@ namespace MyCompanyName.MyProjectName.MongoDB Configure(options => { - options.ConnectionStrings.Default = _mongoDbRunner.ConnectionString + "|MyProjectName"; + options.ConnectionStrings.Default = _mongoDbRunner.ConnectionString.EnsureEndsWith('/') + "MyProjectName"; }); } From 32fe06ca13e8c3a64093ba03f1eb29e3f28ba278 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 13 Aug 2019 10:24:05 +0300 Subject: [PATCH 3/7] Update Part-II.md --- docs/en/Tutorials/Angular/Part-II.md | 55 ++++++++++++---------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/docs/en/Tutorials/Angular/Part-II.md b/docs/en/Tutorials/Angular/Part-II.md index c41128f7a2..48a36ae2c9 100644 --- a/docs/en/Tutorials/Angular/Part-II.md +++ b/docs/en/Tutorials/Angular/Part-II.md @@ -1,4 +1,4 @@ -## Angular Tutorial - Part I +## Angular Tutorial - Part II ### About this Tutorial @@ -9,7 +9,11 @@ This is the second part of the Angular tutorial series. See all parts: You can access to the **source code** of the application from the [GitHub repository](https://github.com/abpframework/abp/tree/dev/samples/BookStore-Angular-MongoDb). -### Type Definition +### Creating a New Book + +In this section, you will learn how to create a new modal dialog form to create a new book. + +#### Type Definition Create an interface, named `CreateUpdateBookInput` in the `books.ts` as shown below: @@ -27,9 +31,9 @@ export namespace Books { `CreateUpdateBookInput` interface matches the `CreateUpdateBookDto` in the backend. -### Add HTTP POST Method +#### Service Method -Open the `books.service.ts` and add a new method, named create to perform an HTTP POST request to the server: +Open the `books.service.ts` and add a new method, named `create` to perform an HTTP POST request to the server: ```typescript create(body: Books.CreateUpdateBookInput): Observable { @@ -43,7 +47,7 @@ create(body: Books.CreateUpdateBookInput): Observable { } ``` -### State Definitions +#### State Definitions Add the `CreateUpdateBook` action to `books.actions.ts` as shown below: @@ -63,13 +67,15 @@ Open `books.state.ts` and define the `save` method that will listen to a `Create ```typescript @Action(CreateUpdateBook) save({ dispatch }: StateContext, { payload }: CreateUpdateBook) { - return this.booksService.create(payload).pipe(switchMap(() => dispatch(new GetBooks()))); + return this.booksService + .create(payload) + .pipe(switchMap(() => dispatch(new GetBooks()))); } ``` -When the `SaveBook` action dispached, the save method runs and then call `create` method of the `BooksService`. After, `BooksService` sends a POST request to the backend. When finished this HTTP call, `BooksState` dispatches `GetBooks` action for getting up-to-date books. +When the `SaveBook` action dispatched, the save method is executed. It call `create` method of the `BooksService` defined before. After the service call, `BooksState` dispatches the `GetBooks` action to get books again from the server to refresh the page. -### Add a Modal to BookListComponent +#### Add a Modal to BookListComponent Open the `book-list.component.html` and add the `abp-modal` to show/hide the book form. @@ -89,7 +95,9 @@ Open the `book-list.component.html` and add the `abp-modal` to show/hide the boo ``` -Then, add the `New book` button to show the modal. +`abp-modal` is a pre-built component to show modals. While you could use another approach to show a modal, `abp-modal` provides additional benefits. + +Add a button, labeled `New book` to show the modal. ```html
@@ -106,20 +114,12 @@ Then, add the `New book` button to show the modal.
``` -Open `book-list.component.ts` and add the `isModalOpen` variable and `onAdd` method to show/hide the modal. +Open the `book-list.component.ts` and add `isModalOpen` variable and `onAdd` method to show/hide the modal. ```typescript -//... -loading = false; - isModalOpen = false; -``` -```typescript -// ... -ngOnInit() { - // ... -} +//... onAdd() { this.isModalOpen = true; @@ -128,24 +128,17 @@ onAdd() { ![empty-modal](images/bookstore-empty-new-book-modal.png) -### Create a Reactive Form +#### Create a Reactive Form -[Reactive forms](https://angular.io/guide/reactive-forms) provide a model-driven approach to handling form inputs whose values change over time. +> [Reactive forms](https://angular.io/guide/reactive-forms) provide a model-driven approach to handling form inputs whose values change over time. -Add the `form` variable and import to the FormGroup from `@angular/core` +Add a `form` variable and inject a `FormBuilder` service to the `book-list.component.ts` as shown below (remember add the import statement). ```typescript -//... -isModalOpen = false; +import { FormGroup, FormBuilder } from '@angular/forms'; form: FormGroup; -``` - -Inject `FormBuilder` dependency by adding it to the `BookListComponent` constructor. -```typescript -import { FormBuilder } from '@angular/forms'; -//... constructor( //... private fb: FormBuilder @@ -154,7 +147,7 @@ constructor( > The [FormBuilder](https://angular.io/api/forms/FormBuilder) service provides convenient methods for generating controls. It reduces the amount of boilerplate needed to build complex forms. -Add the `buildForm` method for create book form. +Add the `buildForm` method to create book form. ```typescript buildForm() { From 5ccdbcc854772befe3096941268a198cac43c397 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 13 Aug 2019 19:39:04 +0800 Subject: [PATCH 4/7] Resolve #1618 Use a constant string as the key for the HttpContext's Items. --- .../HttpContextTenantResolveResultAccessor.cs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpContextTenantResolveResultAccessor.cs b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpContextTenantResolveResultAccessor.cs index 6c44195b1a..593d9a7024 100644 --- a/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpContextTenantResolveResultAccessor.cs +++ b/framework/src/Volo.Abp.AspNetCore.MultiTenancy/Volo/Abp/AspNetCore/MultiTenancy/HttpContextTenantResolveResultAccessor.cs @@ -7,17 +7,11 @@ namespace Volo.Abp.AspNetCore.MultiTenancy [Dependency(ReplaceServices = true)] public class HttpContextTenantResolveResultAccessor : ITenantResolveResultAccessor, ITransientDependency { + public const string HttpContextItemName = "__AbpTenantResolveResult"; + public TenantResolveResult Result { - get - { - if (_httpContextAccessor.HttpContext == null) - { - return null; - } - - return _httpContextAccessor.HttpContext.Items[""] as TenantResolveResult; - } + get => _httpContextAccessor.HttpContext?.Items[HttpContextItemName] as TenantResolveResult; set { if (_httpContextAccessor.HttpContext == null) @@ -25,7 +19,7 @@ namespace Volo.Abp.AspNetCore.MultiTenancy return; } - _httpContextAccessor.HttpContext.Items[""] = value; + _httpContextAccessor.HttpContext.Items[HttpContextItemName] = value; } } From 702705157f7dca5fd1a55565c9faa24ceb96763e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E5=A3=AB=E4=BC=9F?= Date: Wed, 14 Aug 2019 09:02:54 +0800 Subject: [PATCH 5/7] Translating documents. --- docs/en/Startup-Templates/Application.md | 2 - docs/zh-Hans/CLI.md | 7 ++- .../Getting-Started-AspNetCore-Application.md | 2 +- ...Getting-Started-AspNetCore-MVC-Template.md | 2 +- .../Getting-Started-Console-Application.md | 2 +- .../{Mvc.md => Application.md} | 54 +++++++++++------- docs/zh-Hans/Startup-Templates/Index.md | 4 +- .../{Mvc-Module.md => Module.md} | 4 +- .../Tutorials/AspNetCore-Mvc/Part-I.md | 10 ++-- .../Tutorials/AspNetCore-Mvc/Part-II.md | 4 +- .../Tutorials/AspNetCore-Mvc/Part-III.md | 2 + .../images/bookstore-swagger-ui-host.png | Bin 0 -> 60698 bytes ...okstore-visual-studio-solution-for-spa.png | Bin 0 -> 45017 bytes 13 files changed, 55 insertions(+), 38 deletions(-) rename docs/zh-Hans/Startup-Templates/{Mvc.md => Application.md} (87%) rename docs/zh-Hans/Startup-Templates/{Mvc-Module.md => Module.md} (98%) create mode 100644 docs/zh-Hans/images/bookstore-swagger-ui-host.png create mode 100644 docs/zh-Hans/images/bookstore-visual-studio-solution-for-spa.png diff --git a/docs/en/Startup-Templates/Application.md b/docs/en/Startup-Templates/Application.md index 4dabe6a9da..83950ddd0e 100644 --- a/docs/en/Startup-Templates/Application.md +++ b/docs/en/Startup-Templates/Application.md @@ -266,8 +266,6 @@ Server side is very similar to the solution described above. `.HttpApi.Host` pro The files under the `angular/src/environments` folder has the essential configuration of the application. -#### - ## What's Next? - See [Getting Started With the ASP.NET Core MVC Template](../Getting-Started-AspNetCore-MVC-Template.md) to create a new solution and run it for this template. diff --git a/docs/zh-Hans/CLI.md b/docs/zh-Hans/CLI.md index 57799724bd..ad79e30449 100644 --- a/docs/zh-Hans/CLI.md +++ b/docs/zh-Hans/CLI.md @@ -45,13 +45,13 @@ abp new Acme.BookStore * `ef`: Entity Framework Core. * `mongodb`: MongoDB. * `--tiered`: 创建分层解决方案,Web和Http Api层在物理上是分开的. 如果未指定会创建一个分层的解决方案, 此解决方案没有那么复杂,适合大多数场景. - * `mvc-module`: ASP.NET Core [MVC模块模板](Startup-Templates/Mvc-Module.md). 其他选项: + * `module`: [模块模板](Startup-Templates/Module.md). 其他选项: * `--no-ui`: 不包含UI. 仅创建服务模块 (也称为微服务 - 没有UI). * `--output-folder` 或 `-o`: 指定输出文件夹,默认是当前目录. ### add-package -添加新的ABP包到项目中 +通过以下方式将ABP包添加到项目中 * 添加nuget包做为项目的依赖项目. * 添加 `[DependsOn(...)]` attribute到项目的模块类 (请参阅 [模块开发文档](Module-Development-Basics.md)). @@ -78,7 +78,7 @@ abp add-package Volo.Abp.MongoDB ### add-module -通过查找模块的所有包,查找解决方案中的相关项目,并将每个包添加到解决方案中的相应项目,从而将多包模块添加到解决方案中. +通过查找模块的所有包,查找解决方案中的相关项目,并将每个包添加到解决方案中的相应项目,从而将[多包应用程序模块](Modules/Index)添加到解决方案中. > 由于分层,不同的数据库提供程序选项或其他原因,业务模块通常由多个包组成. 使用`add-module`命令可以大大简化向模块添加模块的过程. 但是每个模块可能需要一些其他配置,这些配置通常在相关模块的文档中指出. @@ -100,6 +100,7 @@ abp add-module Volo.Blogging * `--solution` 或 `-s`: 指定解决方案 (.sln) 路径. 如果未指定,CLI会尝试在当前目录中寻找.sln文件. * `--skip-db-migrations`: 对于EF Core 数据库提供程序,它会自动添加新代码的第一次迁移 (`Add-Migration`) 并且在需要时更新数据库 (`Update-Database`). 指定此选项可跳过此操作. +* `-sp` 或 `--startup-project`: 启动项目的项目文件夹的相对路径. 默认值是当前文件夹. ### update diff --git a/docs/zh-Hans/Getting-Started-AspNetCore-Application.md b/docs/zh-Hans/Getting-Started-AspNetCore-Application.md index 021f82b89f..d6e0e1f570 100644 --- a/docs/zh-Hans/Getting-Started-AspNetCore-Application.md +++ b/docs/zh-Hans/Getting-Started-AspNetCore-Application.md @@ -186,4 +186,4 @@ public class Program ### 源码 -从[此处](../samples/BasicAspNetCoreApplication)获取本教程中创建的示例项目的源代码. +从[此处](https://github.com/abpframework/abp/tree/dev/samples/BasicAspNetCoreApplication)获取本教程中创建的示例项目的源代码. diff --git a/docs/zh-Hans/Getting-Started-AspNetCore-MVC-Template.md b/docs/zh-Hans/Getting-Started-AspNetCore-MVC-Template.md index 7f465dc5bb..36268beb8a 100644 --- a/docs/zh-Hans/Getting-Started-AspNetCore-MVC-Template.md +++ b/docs/zh-Hans/Getting-Started-AspNetCore-MVC-Template.md @@ -35,7 +35,7 @@ abp new Acme.BookStore 该解决方案具有分层结构(基于[Domain Driven Design](Domain-Driven-Design.md)), 并包含配置好的的单元&集成测试项目,可与**EF Core**和**SQLite**数据库内存一起使用. -> 请参阅[MVC应用程序模板文档](Startup-Templates/Mvc.md)以详细了解解决方案结构. +> 请参阅[应用程序模板文档](Startup-Templates/Application.md)以详细了解解决方案结构. ### 数据库连接字符串 diff --git a/docs/zh-Hans/Getting-Started-Console-Application.md b/docs/zh-Hans/Getting-Started-Console-Application.md index 346836c8e3..474323beea 100644 --- a/docs/zh-Hans/Getting-Started-Console-Application.md +++ b/docs/zh-Hans/Getting-Started-Console-Application.md @@ -121,4 +121,4 @@ namespace AbpConsoleDemo ### 源码 -从[这里](../samples/BasicConsoleApplication)获取本教程中创建的示例项目的源代码. \ No newline at end of file +从[这里](https://github.com/abpframework/abp/tree/dev/samples/BasicConsoleApplication)获取本教程中创建的示例项目的源代码. \ No newline at end of file diff --git a/docs/zh-Hans/Startup-Templates/Mvc.md b/docs/zh-Hans/Startup-Templates/Application.md similarity index 87% rename from docs/zh-Hans/Startup-Templates/Mvc.md rename to docs/zh-Hans/Startup-Templates/Application.md index fa28c7d869..2a0263d43a 100644 --- a/docs/zh-Hans/Startup-Templates/Mvc.md +++ b/docs/zh-Hans/Startup-Templates/Application.md @@ -1,10 +1,8 @@ -# MVC应用程序启动模板 +# 应用程序启动模板 ## 介绍 -MVC应用程序启动模板是基于[领域驱动设计](../Domain-Driven-Design.md)(DDD)分层(或根据偏好分层)的应用程序结构. - -在这篇文档中详细介绍了解决方案结构和项目 +应用程序启动模板是基于[领域驱动设计](../Domain-Driven-Design.md)(DDD)分层的应用程序结构. 在这篇文档中详细介绍了解决方案结构和项目,如果你想快速入门,请遵循以下指南: * 参阅[ASP.NET Core MVC 模板入门](../Getting-Started-AspNetCore-MVC-Template.md)创建此模板的新解决方案并运行它. * 参阅[ASP.NET Core MVC 教程](../Tutorials/AspNetCore-Mvc/Part-I.md)学习使用此模板开发应用程序. @@ -22,11 +20,24 @@ dotnet tool install -g Volo.Abp.Cli 然后使用 `abp new` 命令在空文件夹中创建新解决方案: ````bash -abp new Acme.BookStore -t mvc +abp new Acme.BookStore -t app ```` * `Acme.BookStore` 是解决方案的名称, 如*YourCompany.YourProduct*. 你可以使用单级或多级名称. -* 示例中指定了启动模板 (`-t` 或 `--template` 选项). 不过 `mvc` 是默认模板,即使未指定也会创建 `MVC` 的模板项目. +* 示例中指定了启动模板 (`-t` 或 `--template` 选项). 示指定模板时,默认模板是`app` . + +### 指定UI框架 + +模板提供了多个UI框架 + +* `mvc`: ASP.NET Core MVC Razor页面 (默认) +* `angular`: Angular UI + +使用 `-u` 或 `--ui` 选择指定UI框架: + +````bash +abp new Acme.BookStore -u angular +```` ### 指定数据库提供程序 @@ -41,23 +52,13 @@ abp new Acme.BookStore -t mvc abp new Acme.BookStore -d mongodb ```` -### 创建分层解决方案 - -使用 `--tiered` 选项创建分层解决方案, Web与WebApi层在物理上是分开的. 如果未指定,CLI会创建一个分层的解决方案,这个解决方案没有那么复杂,适合大多数场景. - -````bash -abp new Acme.BookStore --tiered -```` - -有关分层的方法,请参阅下面的"分层结构"部分. - ## 解决方案结构 根据命令的选项,会创建略有不同的解决方案结构. ### 默认结构 -如果未指定选项,你会得到如下所示的解决方案: +如果未指定附加选项,你会得到如下所示的解决方案: ![bookstore-visual-studio-solution-v3](../images/bookstore-visual-studio-solution-v3.png) @@ -159,7 +160,7 @@ ABP有[动态 C# API 客户端](../AspNetCore/Dynamic-CSharp-API-Clients.md)功 #### .Web 项目 -包含应用程序的用户界面(UI). 包括Razor页面,javascript文件,样式文件,图片等... +包含应用程序的用户界面(UI).如果使用ASP.NET Core MVC UI, 它包括Razor页面,javascript文件,样式文件,图片等... 包含应用程序主要的 `appsettings.json` 配置文件,用于配置数据库连接字符串和应用程序的其他配置 @@ -180,10 +181,10 @@ ABP有[动态 C# API 客户端](../AspNetCore/Dynamic-CSharp-API-Clients.md)功 * `.Domain.Tests` 用于测试领域层. * `.Application.Tests` 用于测试应用层. * `.EntityFrameworkCore.Tests` 用于测试EF Core配置与自定义仓储. -* `.Web.Tests` 用于测试UI. +* `.Web.Tests` 用于测试UI(适用于ASP.NET Core MVC UI). * `.TestBase` 所有测试项目的基础(共享)项目. -此外, `.HttpApi.Client.ConsoleTestApp` 是一个控制台应用程序(不是自动化测试项目),它用于演示DotNet应用程序中HTTP API的用法. +此外, `.HttpApi.Client.ConsoleTestApp` 是一个控制台应用程序(不是自动化测试项目),它用于演示.Net应用程序中HTTP API的用法. 测试项目是用于做集成测试的: @@ -201,7 +202,7 @@ ABP有[动态 C# API 客户端](../AspNetCore/Dynamic-CSharp-API-Clients.md)功 ### 分层结构 -如果你按上面的描述指定了 `--tiered` 选项,会创建分层解决方案. 分层结构的目的是**将Web应用程序和HTTP API部署到不同的服务器**: +如果你选择了ASP.NET Core UI并指定了 `--tiered` 选项,CLI会创建分层解决方案. 分层结构的目的是**将Web应用程序和HTTP API部署到不同的服务器**: ![tiered-solution-servers](../images/tiered-solution-servers.png) @@ -252,6 +253,17 @@ ABP使用开源的[IdentityServer4](https://identityserver.io/)框架做应用 * 然后运行`.HttpApi.Host`,因为`.Web`应用程序需要访问HTTI API. * 最后运行`.Web`并登录到应用程序(用户名: `admin` 密码: `1q2w3E*`). +### Angular UI + +如果你选择Angular做为UI框架(使用 `-u angular` 选择), 解决方案会被分成两个文件夹: + +* `angular` 是客户端部分,文件夹中包含了Angular UI 解决方案. +* `aspnet-core` 是服务端部分,文件夹中包含了ASP.NET Core解决方案. + +服务端部分与上面的描述的解决方案非常相似. `.HttpApi.Host` 项目提供API接口, Angular应用程序使用它提供的接口. + +`angular/src/environments` 文件夹下的文件含有应用程序的基础配置. + ## 下一步是什么? * 参阅[ASP.NET Core MVC 模板入门](../Getting-Started-AspNetCore-MVC-Template.md)创建此模板的新解决方案并运行它. diff --git a/docs/zh-Hans/Startup-Templates/Index.md b/docs/zh-Hans/Startup-Templates/Index.md index c4c75bbedb..57389e6df0 100644 --- a/docs/zh-Hans/Startup-Templates/Index.md +++ b/docs/zh-Hans/Startup-Templates/Index.md @@ -4,5 +4,5 @@ 单击下面列表中的名称以查看相关启动模板的文档: -* [**mvc**](Mvc.md): ASP.NET Core MVC应用程序模板. -* [**mvc-module**](Mvc-Module.md): ASP.NET Core MVC模块/服务模板. \ No newline at end of file +* [**app**](Application.md): 应用程序模板. +* [**module**](Module.md): 模块/服务模板. \ No newline at end of file diff --git a/docs/zh-Hans/Startup-Templates/Mvc-Module.md b/docs/zh-Hans/Startup-Templates/Module.md similarity index 98% rename from docs/zh-Hans/Startup-Templates/Mvc-Module.md rename to docs/zh-Hans/Startup-Templates/Module.md index b45bce010e..adc368ed89 100644 --- a/docs/zh-Hans/Startup-Templates/Mvc-Module.md +++ b/docs/zh-Hans/Startup-Templates/Module.md @@ -15,14 +15,14 @@ dotnet tool install -g Volo.Abp.Cli 然后使用 `abp new` 命令在空文件夹中创建新解决方案: ````bash -abp new Acme.IssueManagement -t mvc-module +abp new Acme.IssueManagement -t module ```` * `Acme.IssueManagement` 是解决方案的名称, 如*YourCompany.YourProduct*. 你可以使用单级或多级名称. ### 无用户界面 -默认情况模板附带一个UI,你可以使用`--no-ui`选项指定不包含UI层. +默认情况模板附带一个MVC UI,你可以使用`--no-ui`选项指定不包含UI层. ````bash abp new Acme.IssueManagement -t mvc-module --no-ui diff --git a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-I.md b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-I.md index f58df60e27..c9a56447ba 100644 --- a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-I.md +++ b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-I.md @@ -10,7 +10,9 @@ - [Part II: 创建,编辑,删除书籍](Part-II.md) - [Part III: 集成测试](Part-III.md) -你可以从[GitHub存储库](https://github.com/volosoft/abp/tree/master/samples/BookStore)访问应用程序的**源代码**. +你可以从[GitHub存储库](https://github.com/abpframework/abp/tree/master/samples/BookStore)访问应用程序的**源代码**. + +> 你也可以观看由ABP社区成员为本教程录制的[视频课程](https://amazingsolutions.teachable.com/p/lets-build-the-bookstore-application). ### 创建项目 @@ -22,7 +24,7 @@ ![bookstore-visual-studio-solution](images/bookstore-visual-studio-solution-v3.png) -> 你可以查看[MVC应用程序模板文档](../../Startup-Templates/Mvc.md)以详细了解解决方案结构.但是,你将通过本教程了解基础知识. +> 你可以查看[应用程序模板文档](../../Startup-Templates/Application.md)以详细了解解决方案结构.但是,你将通过本教程了解基础知识. ### 创建Book实体 @@ -99,7 +101,7 @@ public class BookStoreDbContext : AbpDbContext builder.Entity(b => { b.ToTable(BookStoreConsts.DbTablePrefix + "Books", BookStoreConsts.DbSchema); - b.ConfigureAuditedAggregateRoot(); //auto configure for the base class props + b.ConfigureByConvention(); //auto configure for the base class props b.Property(x => x.Name).IsRequired().HasMaxLength(128); }); ```` @@ -457,7 +459,7 @@ $(function () { 最终的页面如下: -![bookstore-book-list](images/bookstore-book-list.png) +![bookstore-book-list](images/bookstore-book-list-2.png) ### 下一章 diff --git a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-II.md b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-II.md index fabe3fd4d5..dd86b5e119 100644 --- a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-II.md +++ b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-II.md @@ -10,11 +10,13 @@ 你可以从[GitHub存储库](https://github.com/volosoft/abp/tree/master/samples/BookStore)访问应用程序的**源代码**. +> 你也可以观看由ABP社区成员为本教程录制的[视频课程](https://amazingsolutions.teachable.com/p/lets-build-the-bookstore-application). + ### 新增 Book 实体 通过本节, 你将会了解如何创建一个 modal form 来实现新增书籍的功能. 最终成果如下图所示: -![bookstore-create-dialog](images/bookstore-create-dialog.png) +![bookstore-create-dialog](images/bookstore-create-dialog-2.png) #### 新建 modal form diff --git a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-III.md b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-III.md index c31f750832..5bbe0e3424 100644 --- a/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-III.md +++ b/docs/zh-Hans/Tutorials/AspNetCore-Mvc/Part-III.md @@ -10,6 +10,8 @@ 你可以从[GitHub存储库](https://github.com/volosoft/abp/tree/master/samples/BookStore)访问应用程序的**源代码**. +> 你也可以观看由ABP社区成员为本教程录制的[视频课程](https://amazingsolutions.teachable.com/p/lets-build-the-bookstore-application). + ### 解决方案中的测试项目 解决方案中有多个测试项目: diff --git a/docs/zh-Hans/images/bookstore-swagger-ui-host.png b/docs/zh-Hans/images/bookstore-swagger-ui-host.png new file mode 100644 index 0000000000000000000000000000000000000000..74ff73f7e33abfffdfcbe29b24170a05ebcc7704 GIT binary patch literal 60698 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 literal 0 HcmV?d00001 diff --git a/docs/zh-Hans/images/bookstore-visual-studio-solution-for-spa.png b/docs/zh-Hans/images/bookstore-visual-studio-solution-for-spa.png new file mode 100644 index 0000000000000000000000000000000000000000..5a5a283c7d67e97d3fe512921d7a85f6181e6b1d GIT binary patch literal 45017 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

F$H&L7>eI_Fuw3vuzUk=b2qrT!&UWu^ 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 literal 0 HcmV?d00001 From 77079cf981db11efb674bec242083a96e405df47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 14 Aug 2019 13:14:49 +0300 Subject: [PATCH 6/7] Resolved #1628: Upgrade all NuGet packages for the framework for v0.19 release. --- .../Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj | 2 +- framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj | 2 +- framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj | 6 +++--- framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj | 2 +- framework/src/Volo.Abp.Emailing/Volo.Abp.Emailing.csproj | 2 +- .../Volo.Abp.EntityFrameworkCore.SqlServer.csproj | 4 ++-- .../Volo.Abp.EntityFrameworkCore.Sqlite.csproj | 2 +- .../Volo.Abp.EntityFrameworkCore.csproj | 4 ++-- framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj | 2 +- framework/test/AbpTestBase/AbpTestBase.csproj | 4 ++-- .../Volo.Abp.AspNetCore.Authentication.OAuth.Tests.csproj | 2 +- .../Volo.Abp.AspNetCore.MultiTenancy.Tests.csproj | 2 +- .../Volo.Abp.AspNetCore.Mvc.Tests.csproj | 2 +- .../Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj | 2 +- .../Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj | 2 +- .../Volo.Abp.AspNetCore.Mvc.Versioning.Tests.csproj | 2 +- .../Volo.Abp.AspNetCore.Tests.csproj | 2 +- .../Volo.Abp.Auditing.Tests/Volo.Abp.Auditing.Tests.csproj | 2 +- .../Volo.Abp.Authorization.Tests.csproj | 2 +- .../Volo.Abp.AutoMapper.Tests.csproj | 2 +- .../Volo.Abp.Autofac.Tests/Volo.Abp.Autofac.Tests.csproj | 2 +- .../Volo.Abp.BackgroundJobs.Tests.csproj | 2 +- .../Volo.Abp.Caching.Tests/Volo.Abp.Caching.Tests.csproj | 2 +- .../Volo.Abp.Castle.Core.Tests.csproj | 2 +- .../Volo.Abp.Cli.Core.Tests/Volo.Abp.Cli.Core.Tests.csproj | 2 +- .../test/Volo.Abp.Core.Tests/Volo.Abp.Core.Tests.csproj | 2 +- .../test/Volo.Abp.Dapper.Tests/Volo.Abp.Dapper.Tests.csproj | 4 ++-- .../test/Volo.Abp.Data.Tests/Volo.Abp.Data.Tests.csproj | 2 +- framework/test/Volo.Abp.Ddd.Tests/Volo.Abp.Ddd.Tests.csproj | 2 +- .../Volo.Abp.Emailing.Tests/Volo.Abp.Emailing.Tests.csproj | 2 +- .../Volo.Abp.EntityFrameworkCore.Tests.csproj | 4 ++-- .../Volo.Abp.EventBus.Tests/Volo.Abp.EventBus.Tests.csproj | 2 +- .../Volo.Abp.Features.Tests/Volo.Abp.Features.Tests.csproj | 2 +- .../Volo.Abp.FluentValidation.Tests.csproj | 2 +- .../Volo.Abp.Http.Client.Tests.csproj | 2 +- .../test/Volo.Abp.Ldap.Tests/Volo.Abp.Ldap.Tests.csproj | 2 +- .../Volo.Abp.Localization.Tests.csproj | 2 +- .../Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj | 2 +- .../Volo.Abp.MemoryDb.Tests/Volo.Abp.MemoryDb.Tests.csproj | 2 +- .../Volo.Abp.MongoDB.Tests/Volo.Abp.MongoDB.Tests.csproj | 2 +- .../Volo.Abp.MultiTenancy.Tests.csproj | 2 +- .../Volo.Abp.Security.Tests/Volo.Abp.Security.Tests.csproj | 2 +- .../Volo.Abp.Serialization.Tests.csproj | 2 +- .../Volo.Abp.Settings.Tests/Volo.Abp.Settings.Tests.csproj | 2 +- .../Volo.Abp.Specifications.Tests.csproj | 2 +- .../Volo.Abp.TestApp.Tests/Volo.Abp.TestApp.Tests.csproj | 2 +- framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj | 2 +- .../Volo.Abp.UI.Navigation.Tests.csproj | 2 +- framework/test/Volo.Abp.Uow.Tests/Volo.Abp.Uow.Tests.csproj | 2 +- .../Volo.Abp.Validation.Tests.csproj | 2 +- .../Volo.Abp.VirtualFileSystem.Tests.csproj | 2 +- 51 files changed, 58 insertions(+), 58 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj index 4ee308e591..138189864b 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo.Abp.AspNetCore.Mvc.csproj @@ -23,7 +23,7 @@ - + diff --git a/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj b/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj index 3e68488105..9470f72e19 100644 --- a/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj +++ b/framework/src/Volo.Abp.Autofac/Volo.Abp.Autofac.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj b/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj index 1c817ba12f..df991857dc 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj +++ b/framework/src/Volo.Abp.Cli.Core/Volo.Abp.Cli.Core.csproj @@ -12,13 +12,13 @@ - + - + - + diff --git a/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj b/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj index 04c6cf734b..a7a2a4a55a 100644 --- a/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj +++ b/framework/src/Volo.Abp.Core/Volo.Abp.Core.csproj @@ -23,7 +23,7 @@ - + diff --git a/framework/src/Volo.Abp.Emailing/Volo.Abp.Emailing.csproj b/framework/src/Volo.Abp.Emailing/Volo.Abp.Emailing.csproj index b2394ea229..5ed32e6961 100644 --- a/framework/src/Volo.Abp.Emailing/Volo.Abp.Emailing.csproj +++ b/framework/src/Volo.Abp.Emailing/Volo.Abp.Emailing.csproj @@ -19,7 +19,7 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj index 2f5cdfb4fb..458ffda849 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.SqlServer/Volo.Abp.EntityFrameworkCore.SqlServer.csproj @@ -1,4 +1,4 @@ - + @@ -18,7 +18,7 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj index cf6dad2b43..b22bc48301 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Sqlite/Volo.Abp.EntityFrameworkCore.Sqlite.csproj @@ -14,7 +14,7 @@ - + diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj index bfbf0cdf49..a472c09690 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.csproj @@ -19,8 +19,8 @@ - - + + diff --git a/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj b/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj index 82a980f1cf..867565f395 100644 --- a/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj +++ b/framework/src/Volo.Abp.HangFire/Volo.Abp.HangFire.csproj @@ -14,7 +14,7 @@ - + diff --git a/framework/test/AbpTestBase/AbpTestBase.csproj b/framework/test/AbpTestBase/AbpTestBase.csproj index 3aeaf7bd7d..d794eaa279 100644 --- a/framework/test/AbpTestBase/AbpTestBase.csproj +++ b/framework/test/AbpTestBase/AbpTestBase.csproj @@ -15,8 +15,8 @@ - - + + diff --git a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo.Abp.AspNetCore.Authentication.OAuth.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo.Abp.AspNetCore.Authentication.OAuth.Tests.csproj index b76e89b5d6..c4933829eb 100644 --- a/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo.Abp.AspNetCore.Authentication.OAuth.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Authentication.OAuth.Tests/Volo.Abp.AspNetCore.Authentication.OAuth.Tests.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo.Abp.AspNetCore.MultiTenancy.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo.Abp.AspNetCore.MultiTenancy.Tests.csproj index 4142fa7f39..f08d5b1ac2 100644 --- a/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo.Abp.AspNetCore.MultiTenancy.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.MultiTenancy.Tests/Volo.Abp.AspNetCore.MultiTenancy.Tests.csproj @@ -14,7 +14,7 @@ - + diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo.Abp.AspNetCore.Mvc.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo.Abp.AspNetCore.Mvc.Tests.csproj index ea9514a9cb..0f4fabd553 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo.Abp.AspNetCore.Mvc.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Tests/Volo.Abp.AspNetCore.Mvc.Tests.csproj @@ -21,7 +21,7 @@ - + diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj index 93b64b0632..3e92a569bc 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Tests.csproj @@ -20,7 +20,7 @@ - + diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj index 2404de7777..cfbe4ad40d 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Tests/Volo.Abp.AspNetCore.Mvc.UI.Tests.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo.Abp.AspNetCore.Mvc.Versioning.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo.Abp.AspNetCore.Mvc.Versioning.Tests.csproj index 2d0ddd9412..3c9ce2301f 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo.Abp.AspNetCore.Mvc.Versioning.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.Versioning.Tests/Volo.Abp.AspNetCore.Mvc.Versioning.Tests.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/test/Volo.Abp.AspNetCore.Tests/Volo.Abp.AspNetCore.Tests.csproj b/framework/test/Volo.Abp.AspNetCore.Tests/Volo.Abp.AspNetCore.Tests.csproj index e1d676335a..e52c426e43 100644 --- a/framework/test/Volo.Abp.AspNetCore.Tests/Volo.Abp.AspNetCore.Tests.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Tests/Volo.Abp.AspNetCore.Tests.csproj @@ -14,7 +14,7 @@ - + diff --git a/framework/test/Volo.Abp.Auditing.Tests/Volo.Abp.Auditing.Tests.csproj b/framework/test/Volo.Abp.Auditing.Tests/Volo.Abp.Auditing.Tests.csproj index 4034493fc7..aa26dffb44 100644 --- a/framework/test/Volo.Abp.Auditing.Tests/Volo.Abp.Auditing.Tests.csproj +++ b/framework/test/Volo.Abp.Auditing.Tests/Volo.Abp.Auditing.Tests.csproj @@ -16,7 +16,7 @@ - + diff --git a/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj b/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj index 40c4907756..a76bcabb37 100644 --- a/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj +++ b/framework/test/Volo.Abp.Authorization.Tests/Volo.Abp.Authorization.Tests.csproj @@ -16,7 +16,7 @@ - + diff --git a/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj b/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj index e2f7ed2cfd..234c405eda 100644 --- a/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj +++ b/framework/test/Volo.Abp.AutoMapper.Tests/Volo.Abp.AutoMapper.Tests.csproj @@ -14,7 +14,7 @@ - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Autofac.Tests/Volo.Abp.Autofac.Tests.csproj b/framework/test/Volo.Abp.Autofac.Tests/Volo.Abp.Autofac.Tests.csproj index 6c1a23c66f..1a9016ee3a 100644 --- a/framework/test/Volo.Abp.Autofac.Tests/Volo.Abp.Autofac.Tests.csproj +++ b/framework/test/Volo.Abp.Autofac.Tests/Volo.Abp.Autofac.Tests.csproj @@ -15,7 +15,7 @@ - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo.Abp.BackgroundJobs.Tests.csproj b/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo.Abp.BackgroundJobs.Tests.csproj index fea03fb2cf..31e9c91779 100644 --- a/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo.Abp.BackgroundJobs.Tests.csproj +++ b/framework/test/Volo.Abp.BackgroundJobs.Tests/Volo.Abp.BackgroundJobs.Tests.csproj @@ -16,7 +16,7 @@ - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Caching.Tests/Volo.Abp.Caching.Tests.csproj b/framework/test/Volo.Abp.Caching.Tests/Volo.Abp.Caching.Tests.csproj index 3fd378b759..8efd87f2b6 100644 --- a/framework/test/Volo.Abp.Caching.Tests/Volo.Abp.Caching.Tests.csproj +++ b/framework/test/Volo.Abp.Caching.Tests/Volo.Abp.Caching.Tests.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/test/Volo.Abp.Castle.Core.Tests/Volo.Abp.Castle.Core.Tests.csproj b/framework/test/Volo.Abp.Castle.Core.Tests/Volo.Abp.Castle.Core.Tests.csproj index 35b9edf31f..34c30b1600 100644 --- a/framework/test/Volo.Abp.Castle.Core.Tests/Volo.Abp.Castle.Core.Tests.csproj +++ b/framework/test/Volo.Abp.Castle.Core.Tests/Volo.Abp.Castle.Core.Tests.csproj @@ -14,7 +14,7 @@ - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Cli.Core.Tests/Volo.Abp.Cli.Core.Tests.csproj b/framework/test/Volo.Abp.Cli.Core.Tests/Volo.Abp.Cli.Core.Tests.csproj index 0fae5b99d4..d2535076b1 100644 --- a/framework/test/Volo.Abp.Cli.Core.Tests/Volo.Abp.Cli.Core.Tests.csproj +++ b/framework/test/Volo.Abp.Cli.Core.Tests/Volo.Abp.Cli.Core.Tests.csproj @@ -9,7 +9,7 @@ - + diff --git a/framework/test/Volo.Abp.Core.Tests/Volo.Abp.Core.Tests.csproj b/framework/test/Volo.Abp.Core.Tests/Volo.Abp.Core.Tests.csproj index 119ef18d83..957c255d2b 100644 --- a/framework/test/Volo.Abp.Core.Tests/Volo.Abp.Core.Tests.csproj +++ b/framework/test/Volo.Abp.Core.Tests/Volo.Abp.Core.Tests.csproj @@ -14,7 +14,7 @@ - + diff --git a/framework/test/Volo.Abp.Dapper.Tests/Volo.Abp.Dapper.Tests.csproj b/framework/test/Volo.Abp.Dapper.Tests/Volo.Abp.Dapper.Tests.csproj index ecd4187cfb..8e9ff07634 100644 --- a/framework/test/Volo.Abp.Dapper.Tests/Volo.Abp.Dapper.Tests.csproj +++ b/framework/test/Volo.Abp.Dapper.Tests/Volo.Abp.Dapper.Tests.csproj @@ -17,8 +17,8 @@ - - + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Data.Tests/Volo.Abp.Data.Tests.csproj b/framework/test/Volo.Abp.Data.Tests/Volo.Abp.Data.Tests.csproj index 7862e4e0ef..b7895d25a0 100644 --- a/framework/test/Volo.Abp.Data.Tests/Volo.Abp.Data.Tests.csproj +++ b/framework/test/Volo.Abp.Data.Tests/Volo.Abp.Data.Tests.csproj @@ -14,7 +14,7 @@ - + diff --git a/framework/test/Volo.Abp.Ddd.Tests/Volo.Abp.Ddd.Tests.csproj b/framework/test/Volo.Abp.Ddd.Tests/Volo.Abp.Ddd.Tests.csproj index 802d8a53b0..42de4f22f2 100644 --- a/framework/test/Volo.Abp.Ddd.Tests/Volo.Abp.Ddd.Tests.csproj +++ b/framework/test/Volo.Abp.Ddd.Tests/Volo.Abp.Ddd.Tests.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/test/Volo.Abp.Emailing.Tests/Volo.Abp.Emailing.Tests.csproj b/framework/test/Volo.Abp.Emailing.Tests/Volo.Abp.Emailing.Tests.csproj index d8b058f05a..ec4d2f8bda 100644 --- a/framework/test/Volo.Abp.Emailing.Tests/Volo.Abp.Emailing.Tests.csproj +++ b/framework/test/Volo.Abp.Emailing.Tests/Volo.Abp.Emailing.Tests.csproj @@ -21,7 +21,7 @@ - + diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo.Abp.EntityFrameworkCore.Tests.csproj b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo.Abp.EntityFrameworkCore.Tests.csproj index 87cf70501a..e70921b325 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo.Abp.EntityFrameworkCore.Tests.csproj +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo.Abp.EntityFrameworkCore.Tests.csproj @@ -20,8 +20,8 @@ - - + + \ No newline at end of file diff --git a/framework/test/Volo.Abp.EventBus.Tests/Volo.Abp.EventBus.Tests.csproj b/framework/test/Volo.Abp.EventBus.Tests/Volo.Abp.EventBus.Tests.csproj index ac8c0ef36f..eb0f746272 100644 --- a/framework/test/Volo.Abp.EventBus.Tests/Volo.Abp.EventBus.Tests.csproj +++ b/framework/test/Volo.Abp.EventBus.Tests/Volo.Abp.EventBus.Tests.csproj @@ -17,7 +17,7 @@ - + diff --git a/framework/test/Volo.Abp.Features.Tests/Volo.Abp.Features.Tests.csproj b/framework/test/Volo.Abp.Features.Tests/Volo.Abp.Features.Tests.csproj index 02c7475eb0..dd7436e1d2 100644 --- a/framework/test/Volo.Abp.Features.Tests/Volo.Abp.Features.Tests.csproj +++ b/framework/test/Volo.Abp.Features.Tests/Volo.Abp.Features.Tests.csproj @@ -16,7 +16,7 @@ - + diff --git a/framework/test/Volo.Abp.FluentValidation.Tests/Volo.Abp.FluentValidation.Tests.csproj b/framework/test/Volo.Abp.FluentValidation.Tests/Volo.Abp.FluentValidation.Tests.csproj index 999d06d67c..089dbcab38 100644 --- a/framework/test/Volo.Abp.FluentValidation.Tests/Volo.Abp.FluentValidation.Tests.csproj +++ b/framework/test/Volo.Abp.FluentValidation.Tests/Volo.Abp.FluentValidation.Tests.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/test/Volo.Abp.Http.Client.Tests/Volo.Abp.Http.Client.Tests.csproj b/framework/test/Volo.Abp.Http.Client.Tests/Volo.Abp.Http.Client.Tests.csproj index aff0575607..8800d492ea 100644 --- a/framework/test/Volo.Abp.Http.Client.Tests/Volo.Abp.Http.Client.Tests.csproj +++ b/framework/test/Volo.Abp.Http.Client.Tests/Volo.Abp.Http.Client.Tests.csproj @@ -15,7 +15,7 @@ - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.Ldap.Tests/Volo.Abp.Ldap.Tests.csproj b/framework/test/Volo.Abp.Ldap.Tests/Volo.Abp.Ldap.Tests.csproj index c221b309c4..c7e32be51a 100644 --- a/framework/test/Volo.Abp.Ldap.Tests/Volo.Abp.Ldap.Tests.csproj +++ b/framework/test/Volo.Abp.Ldap.Tests/Volo.Abp.Ldap.Tests.csproj @@ -8,7 +8,7 @@ - + diff --git a/framework/test/Volo.Abp.Localization.Tests/Volo.Abp.Localization.Tests.csproj b/framework/test/Volo.Abp.Localization.Tests/Volo.Abp.Localization.Tests.csproj index 1decc345f4..4cc31224fc 100644 --- a/framework/test/Volo.Abp.Localization.Tests/Volo.Abp.Localization.Tests.csproj +++ b/framework/test/Volo.Abp.Localization.Tests/Volo.Abp.Localization.Tests.csproj @@ -18,7 +18,7 @@ - + diff --git a/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj b/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj index 17097b1bf0..09ea53af78 100644 --- a/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj +++ b/framework/test/Volo.Abp.MailKit.Tests/Volo.Abp.MailKit.Tests.csproj @@ -14,7 +14,7 @@ - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.MemoryDb.Tests/Volo.Abp.MemoryDb.Tests.csproj b/framework/test/Volo.Abp.MemoryDb.Tests/Volo.Abp.MemoryDb.Tests.csproj index 1d83b1e54f..136dc408c6 100644 --- a/framework/test/Volo.Abp.MemoryDb.Tests/Volo.Abp.MemoryDb.Tests.csproj +++ b/framework/test/Volo.Abp.MemoryDb.Tests/Volo.Abp.MemoryDb.Tests.csproj @@ -16,7 +16,7 @@ - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.MongoDB.Tests/Volo.Abp.MongoDB.Tests.csproj b/framework/test/Volo.Abp.MongoDB.Tests/Volo.Abp.MongoDB.Tests.csproj index a99a675193..0605a51a7c 100644 --- a/framework/test/Volo.Abp.MongoDB.Tests/Volo.Abp.MongoDB.Tests.csproj +++ b/framework/test/Volo.Abp.MongoDB.Tests/Volo.Abp.MongoDB.Tests.csproj @@ -20,7 +20,7 @@ - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.MultiTenancy.Tests/Volo.Abp.MultiTenancy.Tests.csproj b/framework/test/Volo.Abp.MultiTenancy.Tests/Volo.Abp.MultiTenancy.Tests.csproj index 16c27a26a6..1258956caf 100644 --- a/framework/test/Volo.Abp.MultiTenancy.Tests/Volo.Abp.MultiTenancy.Tests.csproj +++ b/framework/test/Volo.Abp.MultiTenancy.Tests/Volo.Abp.MultiTenancy.Tests.csproj @@ -14,7 +14,7 @@ - + diff --git a/framework/test/Volo.Abp.Security.Tests/Volo.Abp.Security.Tests.csproj b/framework/test/Volo.Abp.Security.Tests/Volo.Abp.Security.Tests.csproj index 46b4c9e952..696592c5d3 100644 --- a/framework/test/Volo.Abp.Security.Tests/Volo.Abp.Security.Tests.csproj +++ b/framework/test/Volo.Abp.Security.Tests/Volo.Abp.Security.Tests.csproj @@ -14,7 +14,7 @@ - + diff --git a/framework/test/Volo.Abp.Serialization.Tests/Volo.Abp.Serialization.Tests.csproj b/framework/test/Volo.Abp.Serialization.Tests/Volo.Abp.Serialization.Tests.csproj index a7325c95c0..b800df4fb0 100644 --- a/framework/test/Volo.Abp.Serialization.Tests/Volo.Abp.Serialization.Tests.csproj +++ b/framework/test/Volo.Abp.Serialization.Tests/Volo.Abp.Serialization.Tests.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/test/Volo.Abp.Settings.Tests/Volo.Abp.Settings.Tests.csproj b/framework/test/Volo.Abp.Settings.Tests/Volo.Abp.Settings.Tests.csproj index 76f2d05afa..419451777d 100644 --- a/framework/test/Volo.Abp.Settings.Tests/Volo.Abp.Settings.Tests.csproj +++ b/framework/test/Volo.Abp.Settings.Tests/Volo.Abp.Settings.Tests.csproj @@ -16,7 +16,7 @@ - + diff --git a/framework/test/Volo.Abp.Specifications.Tests/Volo.Abp.Specifications.Tests.csproj b/framework/test/Volo.Abp.Specifications.Tests/Volo.Abp.Specifications.Tests.csproj index e3f35153f9..3b1f95fabb 100644 --- a/framework/test/Volo.Abp.Specifications.Tests/Volo.Abp.Specifications.Tests.csproj +++ b/framework/test/Volo.Abp.Specifications.Tests/Volo.Abp.Specifications.Tests.csproj @@ -15,7 +15,7 @@ - + \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp.Tests/Volo.Abp.TestApp.Tests.csproj b/framework/test/Volo.Abp.TestApp.Tests/Volo.Abp.TestApp.Tests.csproj index 51b60b693f..1d999ea9d5 100644 --- a/framework/test/Volo.Abp.TestApp.Tests/Volo.Abp.TestApp.Tests.csproj +++ b/framework/test/Volo.Abp.TestApp.Tests/Volo.Abp.TestApp.Tests.csproj @@ -13,7 +13,7 @@ - + diff --git a/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj b/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj index 3da0bcd7ce..be55d0dc90 100644 --- a/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj +++ b/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj @@ -18,7 +18,7 @@ - + diff --git a/framework/test/Volo.Abp.UI.Navigation.Tests/Volo.Abp.UI.Navigation.Tests.csproj b/framework/test/Volo.Abp.UI.Navigation.Tests/Volo.Abp.UI.Navigation.Tests.csproj index 4fa8929ed4..9a1f142f01 100644 --- a/framework/test/Volo.Abp.UI.Navigation.Tests/Volo.Abp.UI.Navigation.Tests.csproj +++ b/framework/test/Volo.Abp.UI.Navigation.Tests/Volo.Abp.UI.Navigation.Tests.csproj @@ -14,7 +14,7 @@ - + diff --git a/framework/test/Volo.Abp.Uow.Tests/Volo.Abp.Uow.Tests.csproj b/framework/test/Volo.Abp.Uow.Tests/Volo.Abp.Uow.Tests.csproj index 574891cc27..dd868b860f 100644 --- a/framework/test/Volo.Abp.Uow.Tests/Volo.Abp.Uow.Tests.csproj +++ b/framework/test/Volo.Abp.Uow.Tests/Volo.Abp.Uow.Tests.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/test/Volo.Abp.Validation.Tests/Volo.Abp.Validation.Tests.csproj b/framework/test/Volo.Abp.Validation.Tests/Volo.Abp.Validation.Tests.csproj index 7fb87036e2..ea192bb236 100644 --- a/framework/test/Volo.Abp.Validation.Tests/Volo.Abp.Validation.Tests.csproj +++ b/framework/test/Volo.Abp.Validation.Tests/Volo.Abp.Validation.Tests.csproj @@ -15,7 +15,7 @@ - + diff --git a/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo.Abp.VirtualFileSystem.Tests.csproj b/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo.Abp.VirtualFileSystem.Tests.csproj index d69c461c29..e74d97c437 100644 --- a/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo.Abp.VirtualFileSystem.Tests.csproj +++ b/framework/test/Volo.Abp.VirtualFileSystem.Tests/Volo.Abp.VirtualFileSystem.Tests.csproj @@ -18,7 +18,7 @@ - + From 7a088fc29aa48e105e1c1e45233747e7e43f2464 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 14 Aug 2019 20:15:29 +0800 Subject: [PATCH 7/7] Resolve #1629 Modify the EF Core global filter expression. --- .../Volo/Abp/EntityFrameworkCore/AbpDbContext.cs | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 06c5cb4ff4..1ed5f3eaed 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -494,24 +494,12 @@ namespace Volo.Abp.EntityFrameworkCore if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity))) { - /* This condition should normally be defined as below: - * !IsSoftDeleteFilterEnabled || !((ISoftDelete) e).IsDeleted - * But this causes a problem with EF Core (see https://github.com/aspnet/EntityFrameworkCore/issues/9502) - * So, we made a workaround to make it working. It works same as above. - */ - - Expression> softDeleteFilter = e => !((ISoftDelete)e).IsDeleted || ((ISoftDelete)e).IsDeleted != IsSoftDeleteFilterEnabled; - expression = expression == null ? softDeleteFilter : CombineExpressions(expression, softDeleteFilter); + expression = e => !IsSoftDeleteFilterEnabled || !((ISoftDelete) e).IsDeleted; } if (typeof(IMultiTenant).IsAssignableFrom(typeof(TEntity))) { - /* This condition should normally be defined as below: - * !IsMayHaveTenantFilterEnabled || ((IMayHaveTenant)e).TenantId == CurrentTenantId - * But this causes a problem with EF Core (see https://github.com/aspnet/EntityFrameworkCore/issues/9502) - * So, we made a workaround to make it working. It works same as above. - */ - Expression> multiTenantFilter = e => ((IMultiTenant)e).TenantId == CurrentTenantId || (((IMultiTenant)e).TenantId == CurrentTenantId) == IsMultiTenantFilterEnabled; + Expression> multiTenantFilter = e => !IsMultiTenantFilterEnabled || ((IMultiTenant) e).TenantId == CurrentTenantId; expression = expression == null ? multiTenantFilter : CombineExpressions(expression, multiTenantFilter); }