diff --git a/common.DotSettings b/common.DotSettings index cb0b2c919f..0eb4875d49 100644 --- a/common.DotSettings +++ b/common.DotSettings @@ -20,4 +20,5 @@ False False SQL + True \ No newline at end of file diff --git a/docs/zh-Hans/Customizing-Application-Modules-Extending-Entities.md b/docs/zh-Hans/Customizing-Application-Modules-Extending-Entities.md index 1ff03ae104..4cc73989fc 100644 --- a/docs/zh-Hans/Customizing-Application-Modules-Extending-Entities.md +++ b/docs/zh-Hans/Customizing-Application-Modules-Extending-Entities.md @@ -37,13 +37,14 @@ return user.GetProperty("Title"); 为了解决上面的问题,用于EF Core的ABP框架实体扩展系统允许你使用上面定义相同的额外属性API,但将所需的属性存储在单独的数据库表字段中. -假设你想要添加 `SocialSecurityNumber` 到[身份模块](Modules/Identity.md)的 `IdentityUser` 实体. 你可以使用 `EntityExtensionManager` 静态类: +假设你想要添加 `SocialSecurityNumber` 到[身份模块](Modules/Identity.md)的 `IdentityUser` 实体. 你可以使用 `ObjectExtensionManager` 类: ````csharp -EntityExtensionManager.AddProperty( - "SocialSecurityNumber", - b => { b.HasMaxLength(32); } -); +ObjectExtensionManager.Instance + .MapEfCoreProperty( + "SocialSecurityNumber", + b => { b.HasMaxLength(32); } + ); ```` * 你提供了 `IdentityUser` 作为实体名(泛型参数), `string` 做为新属性的类型, `SocialSecurityNumber` 做为属性名(也是数据库表的字段名). diff --git a/docs/zh-Hans/Entities.md b/docs/zh-Hans/Entities.md index 32dc4ceb53..96d75895d2 100644 --- a/docs/zh-Hans/Entities.md +++ b/docs/zh-Hans/Entities.md @@ -367,7 +367,7 @@ public static class IdentityUserExtensions * 对于 [Entity Framework Core](Entity-Framework-Core.md),这是两种类型的配置; * 默认它以 `JSON` 字符串形式存储在 `ExtraProperties` 字段中. 序列化到 `JSON` 和反序列化到 `JSON` 由ABP使用EF Core的[值转换](https://docs.microsoft.com/zh-cn/ef/core/modeling/value-conversions)系统自动完成. - * 如果需要,你可以使用 `EntityExtensionManager` 为所需的额外属性定义一个单独的数据库字段. 那些使用 `EntityExtensionManager` 配置的属性继续使用单个 `JSON` 字段. 当你使用预构建的[应用模块](Modules/Index.md)并且想要[扩展模块的实体](Customizing-Application-Modules-Extending-Entities.md). 参阅[EF Core迁移文档](Entity-Framework-Core.md)了解如何使用 `EntityExtensionManager`. + * 如果需要,你可以使用 `ObjectExtensionManager` 为所需的额外属性定义一个单独的数据库字段. 那些使用 `ObjectExtensionManager` 配置的属性继续使用单个 `JSON` 字段. 当你使用预构建的[应用模块](Modules/Index.md)并且想要[扩展模块的实体](Customizing-Application-Modules-Extending-Entities.md). 参阅[EF Core迁移文档](Entity-Framework-Core.md)了解如何使用 `ObjectExtensionManager`. * 对于 [MongoDB](MongoDB.md), 它以 **常规字段** 存储, 因为 MongoDB 天生支持这种 [额外](https://mongodb.github.io/mongo-csharp-driver/1.11/serialization/#supporting-extra-elements) 系统. ### 讨论额外的属性 diff --git a/docs/zh-Hans/Entity-Framework-Core-Migrations.md b/docs/zh-Hans/Entity-Framework-Core-Migrations.md index 0b6b075fb6..5da30614dd 100644 --- a/docs/zh-Hans/Entity-Framework-Core-Migrations.md +++ b/docs/zh-Hans/Entity-Framework-Core-Migrations.md @@ -411,10 +411,11 @@ public static class MyProjectNameEntityExtensions { OneTimeRunner.Run(() => { - EntityExtensionManager.AddProperty( - "Title", - b => { b.HasMaxLength(128); } - ); + ObjectExtensionManager.Instance + .MapEfCoreProperty( + "Title", + builder => { builder.HasMaxLength(64); } + ); }); } } @@ -422,7 +423,7 @@ public static class MyProjectNameEntityExtensions > 我们建议使用 `nameof(AppRole.Title)` 而不是硬编码 "Title" 字符串 -`EntityExtensionManager` 用于添加属性到现有的实体. 由于 `EntityExtensionManager` 是静态的,因此应调用一次. `OneTimeRunner` 是ABP框架定义简单的工具类. +`ObjectExtensionManager` 用于添加属性到现有的实体. 由于 `ObjectExtensionManager.Instance` 是静态实例(单例),因此应调用一次. `OneTimeRunner` 是ABP框架定义简单的工具类. 参阅[EF Core集成文档](Entity-Framework-Core.md)了解更多关于实体扩展系统. @@ -547,7 +548,7 @@ public class IdentityRoleExtendingService : ITransientDependency 实体扩展系统解决了额外属性主要的问题: 它可以将额外属性做为**标准表字段**存储到数据库. -你需要做的就是如上所诉使用 `EntityExtensionManager` 定义额外属性, 然后你就可以使得 `GetProperty` 和 `SetProperty` 方法对实体的属性进行get/set,但是这时它存储在数据库表的单独字段中. +你需要做的就是如上所诉使用 `ObjectExtensionManager` 定义额外属性, 然后你就可以使得 `GetProperty` 和 `SetProperty` 方法对实体的属性进行get/set,但是这时它存储在数据库表的单独字段中. ###### 创建新表 diff --git a/docs/zh-Hans/Entity-Framework-Core.md b/docs/zh-Hans/Entity-Framework-Core.md index 8638b89b63..d2af31f4d2 100644 --- a/docs/zh-Hans/Entity-Framework-Core.md +++ b/docs/zh-Hans/Entity-Framework-Core.md @@ -298,56 +298,57 @@ public class BookService > 要点: 你必须在使用`DbContext`的项目里引用`Volo.Abp.EntityFrameworkCore`包. 这会破坏封装,但在这种情况下,这就是你需要的. -## Extra Properties & Entity Extension Manager +## Extra Properties & Object Extension Manager 额外属性系统允许你为实现了 `IHasExtraProperties` 的实体set/get动态属性. 当你想将自定义属性添加到[应用程序模块](Modules/Index.md)中定义的实体时,它特别有用. -默认,实体的所有额外属性存储在数据库的一个 `JSON` 对象中. 实体扩展系统允许你存储额外属性在数据库的单独字段中. +默认,实体的所有额外属性存储在数据库的一个 `JSON` 对象中. -有关额外属性和实体扩展系统的更多信息,请参阅下列文档: +实体扩展系统允许你存储额外属性在数据库的单独字段中. 有关额外属性和实体扩展系统的更多信息,请参阅下列文档: * [自定义应用模块: 扩展实体](Customizing-Application-Modules-Extending-Entities.md) * [实体](Entities.md) -本节只解释了 `EntityExtensionManager` 及其用法. +本节只解释了 EF Core相关的 `ObjectExtensionManager` 及其用法. -### AddProperty 方法 +### ObjectExtensionManager.Instance -`EntityExtensionManager` 的 `AddProperty` 方法允许你实体定义附加的属性. +`ObjectExtensionManager` 实现单例模式,因此你需要使用静态的 `ObjectExtensionManager.Instance` 来执行所有操作。 + +### MapEfCoreProperty + +`MapEfCoreProperty` 是一种快捷扩展方法,用于定义实体的扩展属性并映射到数据库. **示例**: 添加 `Title` 属性 (数据库字段)到 `IdentityRole` 实体: ````csharp -EntityExtensionManager.AddProperty( - "Title", - b => { b.HasMaxLength(128); } -); +ObjectExtensionManager.Instance + .MapEfCoreProperty( + "Title", + builder => { builder.HasMaxLength(64); } + ); ```` -如果相关模块已实现此功能(通过使用下面说明的 `ConfigureExtensions`)则将新属性添加到模型中. 然后你需要运行标准的 `Add-Migration` 和 `Update-Database` 命令更新数据库以添加新字段. +如果相关模块已实现此功能(通过使用下面说明的 `ConfigureEfCoreEntity`)则将新属性添加到模型中. 然后你需要运行标准的 `Add-Migration` 和 `Update-Database` 命令更新数据库以添加新字段. ->`AddProperty` 方法必须在使用相关的 `DbContext` 之前调用,它是一个静态方法. 最好的方法是尽早的应用程序中使用它. 应用程序启动模板含有 `YourProjectNameEntityExtensions` 类,可以在放心的在此类中使用此方法. +>`MapEfCoreProperty` 方法必须在使用相关的 `DbContext` 之前调用,它是一个静态方法. 最好的方法是尽早的应用程序中使用它. 应用程序启动模板含有 `YourProjectNameEntityExtensions` 类,可以在放心的在此类中使用此方法. -### ConfigureExtensions +### ConfigureEfCoreEntity -如果你正在开发一个可重用使用的模块,并允许应用程序开发人员将属性添加到你的实体,你可以在实体映射使用 `ConfigureExtensions` 扩展方法: +如果你正在开发一个可重用使用的模块,并允许应用程序开发人员将属性添加到你的实体,你可以在实体映射使用 `ConfigureEfCoreEntity` 扩展方法,但是在配置实体映射时可以使用快捷的扩展方法 `ConfigureObjectExtensions`: ````csharp builder.Entity(b => { - b.ConfigureExtensions(); + b.ConfigureObjectExtensions(); //... }); ```` -如果你调用 `ConfigureByConvention()` 扩展方法(在此示例中 `b.ConfigureByConvention`),ABP框架内部会调用 `ConfigureExtensions` 方法. 使用 `ConfigureByConvention` 方法是**最佳实践**,因为它还按照约定配置基本属性的数据库映射. +如果你调用 `ConfigureByConvention()` 扩展方法(在此示例中 `b.ConfigureByConvention`),ABP框架内部会调用 `ConfigureObjectExtensions` 方法. 使用 `ConfigureByConvention` 方法是**最佳实践**,因为它还按照约定配置基本属性的数据库映射. 参阅上面提到的 "*ConfigureByConvention 方法*" 了解更多信息. -### GetPropertyNames - -`EntityExtensionManager.GetPropertyNames` 静态方法可以用作为此实体定义的扩展属性的名称. 应用程序代码通常不需要,但是ABP框架在内部使用它. - ## 高级主题 ### 设置默认仓储类 diff --git a/docs/zh-Hans/Getting-Started-Angular-Template.md b/docs/zh-Hans/Getting-Started-Angular-Template.md new file mode 100644 index 0000000000..d2ec83293b --- /dev/null +++ b/docs/zh-Hans/Getting-Started-Angular-Template.md @@ -0,0 +1,3 @@ +## Getting Started With the Angular Application Template + +TODO... \ No newline at end of file diff --git a/docs/zh-Hans/Getting-Started-With-Startup-Templates.md b/docs/zh-Hans/Getting-Started-With-Startup-Templates.md new file mode 100644 index 0000000000..2b23350612 --- /dev/null +++ b/docs/zh-Hans/Getting-Started-With-Startup-Templates.md @@ -0,0 +1,6 @@ +# 启动模板入门 + +参阅下面的教程来学习如何开始使用的ABP框架预构建的应用程序启动模板: + +* [ASP.NET Core MVC/Razor页面模板入门](Getting-Started-AspNetCore-MVC-Template.md) +* [Angular UI模板入门](Getting-Started-Angular-Template.md) \ No newline at end of file diff --git a/docs/zh-Hans/Startup-Templates/Application.md b/docs/zh-Hans/Startup-Templates/Application.md index 53e826ab7c..78d43759db 100644 --- a/docs/zh-Hans/Startup-Templates/Application.md +++ b/docs/zh-Hans/Startup-Templates/Application.md @@ -2,11 +2,16 @@ ## 介绍 -应用程序启动模板是基于[领域驱动设计](../Domain-Driven-Design.md)(DDD)分层的应用程序结构. 在这篇文档中详细介绍了解决方案结构和项目,如果你想快速入门,请遵循以下指南: +应用程序启动模板是基于[领域驱动设计](../Domain-Driven-Design.md)(DDD)分层的应用程序结构. -* 参阅[ASP.NET Core MVC 模板入门](../Getting-Started-AspNetCore-MVC-Template.md)创建此模板的新解决方案并运行它. +在这篇文档中详细介绍了**解决方案结构**和项目,如果你想快速入门,请遵循以下指南: + +* 参阅[ASP.NET Core MVC 模板入门](../Getting-Started-With-Startup-Templates.md)创建此模板的新解决方案并运行它. * 参阅[ASP.NET Core MVC 教程](../Tutorials/AspNetCore-Mvc/Part-I.md)学习使用此模板开发应用程序. +* [入门文档](../Getting-Started-AspNetCore-MVC-Template.md) 介绍了如何在几分钟内创建一个新的应用程序. +* [应用程序开发教程](../Tutorials/AspNetCore-Mvc/Part-I.md) 学习使用此模板开发应用程序. + ## 如何开始 你可以使用[ABP CLI](../CLI.md)创建基于此启动模板的新项目,或者你也可以在[入门](https://abp.io/get-started)页面创建并下载项目. 在这里我们使用CLI创建新项目. @@ -120,6 +125,7 @@ ABP是一个模块化的框架,理想的设计是让每个模块都有自己的 * 它依赖 `.EntityFrameworkCore` 项目,因为它重用了应用程序的 `DbContext` 配置 . > 只有在你使用了EF Core做为数据库提供程序时,此项目才会可用. +> 参阅[Entity Framework Core迁移指南](../Entity-Framework-Core-Migrations.md)了解这个项目的详细信息. #### .DbMigrator 项目 diff --git a/docs/zh-Hans/docs-nav.json b/docs/zh-Hans/docs-nav.json index dae300b077..c1aa2be23d 100644 --- a/docs/zh-Hans/docs-nav.json +++ b/docs/zh-Hans/docs-nav.json @@ -5,6 +5,7 @@ "items": [ { "text": "从启动模板开始", + "path": "Getting-Started-With-Startup-Templates.md", "items": [ { "text": "ASP.NET Core MVC 模板", diff --git a/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs b/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs index 031a3a9948..e78e9628c1 100644 --- a/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs +++ b/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs @@ -25,7 +25,8 @@ namespace AutoMapper HasExtraPropertiesObjectExtendingExtensions .MapExtraPropertiesTo( source.ExtraProperties, - result + result, + definitionChecks ); return result; diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/ITenantAppService.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/ITenantAppService.cs index cd5f0697f7..69081ec5b9 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/ITenantAppService.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/ITenantAppService.cs @@ -11,6 +11,5 @@ namespace Volo.Abp.TenantManagement Task UpdateDefaultConnectionStringAsync(Guid id, string defaultConnectionString); Task DeleteDefaultConnectionStringAsync(Guid id); - } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs index 189d7d0f80..5d8d02ada9 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs @@ -1,9 +1,4 @@ -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Text.RegularExpressions; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Localization; -using Volo.Abp.TenantManagement.Localization; +using System.ComponentModel.DataAnnotations; namespace Volo.Abp.TenantManagement { @@ -14,7 +9,6 @@ namespace Volo.Abp.TenantManagement [MaxLength(256)] public string AdminEmailAddress { get; set; } - [Required] [MaxLength(128)] public string AdminPassword { get; set; } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs index b02da79b79..19f73b0d51 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs @@ -1,8 +1,9 @@ using System.ComponentModel.DataAnnotations; +using Volo.Abp.ObjectExtending; namespace Volo.Abp.TenantManagement { - public abstract class TenantCreateOrUpdateDtoBase + public abstract class TenantCreateOrUpdateDtoBase : ExtensibleObject { [Required] [StringLength(TenantConsts.MaxNameLength)] diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantDto.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantDto.cs index a410e90da5..36422c7a1c 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantDto.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantDto.cs @@ -3,7 +3,7 @@ using Volo.Abp.Application.Dtos; namespace Volo.Abp.TenantManagement { - public class TenantDto : EntityDto + public class TenantDto : ExtensibleEntityDto { public string Name { get; set; } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationAutoMapperProfile.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationAutoMapperProfile.cs index 61a2994dd7..f0212a926e 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationAutoMapperProfile.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationAutoMapperProfile.cs @@ -6,7 +6,8 @@ namespace Volo.Abp.TenantManagement { public AbpTenantManagementApplicationAutoMapperProfile() { - CreateMap(); + CreateMap() + .MapExtraProperties(); } } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs index cbe9b67c76..f618011cc7 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Dtos; using Volo.Abp.Data; +using Volo.Abp.ObjectExtending; namespace Volo.Abp.TenantManagement { @@ -27,13 +28,19 @@ namespace Volo.Abp.TenantManagement public virtual async Task GetAsync(Guid id) { return ObjectMapper.Map( - await TenantRepository.GetAsync(id)); + await TenantRepository.GetAsync(id) + ); } public virtual async Task> GetListAsync(GetTenantsInput input) { var count = await TenantRepository.GetCountAsync(input.Filter); - var list = await TenantRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter); + var list = await TenantRepository.GetListAsync( + input.Sorting, + input.MaxResultCount, + input.SkipCount, + input.Filter + ); return new PagedResultDto( count, @@ -45,6 +52,8 @@ namespace Volo.Abp.TenantManagement public virtual async Task CreateAsync(TenantCreateDto input) { var tenant = await TenantManager.CreateAsync(input.Name); + input.MapExtraPropertiesTo(tenant); + await TenantRepository.InsertAsync(tenant); using (CurrentTenant.Change(tenant.Id, tenant.Name)) @@ -66,6 +75,7 @@ namespace Volo.Abp.TenantManagement { var tenant = await TenantRepository.GetAsync(id); await TenantManager.ChangeNameAsync(tenant, input.Name); + input.MapExtraPropertiesTo(tenant); await TenantRepository.UpdateAsync(tenant); return ObjectMapper.Map(tenant); } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs index 26cc747f82..1d01a7f696 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs @@ -14,16 +14,15 @@ namespace Volo.Abp.TenantManagement protected Tenant() { - ExtraProperties = new Dictionary(); + } protected internal Tenant(Guid id, [NotNull] string name) + : base(id) { - Id = id; SetName(name); ConnectionStrings = new List(); - ExtraProperties = new Dictionary(); } [CanBeNull] diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebAutoMapperProfile.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebAutoMapperProfile.cs index a5a094eb71..d226e9629c 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebAutoMapperProfile.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebAutoMapperProfile.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Volo.Abp.AutoMapper; using Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants; namespace Volo.Abp.TenantManagement.Web @@ -6,20 +7,17 @@ namespace Volo.Abp.TenantManagement.Web public class AbpTenantManagementWebAutoMapperProfile : Profile { public AbpTenantManagementWebAutoMapperProfile() - { - CreateRoleMappings(); - } - - protected virtual void CreateRoleMappings() { //List CreateMap(); //CreateModal - CreateMap(); + CreateMap() + .Ignore(x => x.ExtraProperties); //EditModal - CreateMap(); + CreateMap() + .Ignore(x => x.ExtraProperties); } } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs index 2184169d5e..5456e512ec 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs @@ -2,7 +2,6 @@ using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; -using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs index 098f7e1393..86569149f8 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs @@ -1,7 +1,6 @@ using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; -using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs index 5fb2f06859..1ae5709d57 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs @@ -2,7 +2,6 @@ using System; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; -using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs index 26e2639524..84e7f88791 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs @@ -1,4 +1,5 @@ using MyCompanyName.MyProjectName.MultiTenancy; +using MyCompanyName.MyProjectName.ObjectExtending; using Volo.Abp.AuditLogging; using Volo.Abp.BackgroundJobs; using Volo.Abp.FeatureManagement; @@ -27,6 +28,11 @@ namespace MyCompanyName.MyProjectName )] public class MyProjectNameDomainModule : AbpModule { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + MyProjectNameDomainObjectExtensions.Configure(); + } + public override void ConfigureServices(ServiceConfigurationContext context) { Configure(options => diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameEntityExtensions.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/ObjectExtending/MyProjectNameDomainObjectExtensions.cs similarity index 55% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameEntityExtensions.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/ObjectExtending/MyProjectNameDomainObjectExtensions.cs index 79107d9ce6..6c1439e7c2 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameEntityExtensions.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/ObjectExtending/MyProjectNameDomainObjectExtensions.cs @@ -2,9 +2,9 @@ using Volo.Abp.ObjectExtending; using Volo.Abp.Threading; -namespace MyCompanyName.MyProjectName.MongoDB +namespace MyCompanyName.MyProjectName.ObjectExtending { - public static class MyProjectNameEntityExtensions + public static class MyProjectNameDomainObjectExtensions { private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); @@ -12,8 +12,11 @@ namespace MyCompanyName.MyProjectName.MongoDB { OneTimeRunner.Run(() => { - /* You can extension properties to entities + /* You can configure extension properties to entities or other object types * defined in the depended modules. + * + * If you are using EF Core and want to map the entity extension properties to new + * table fields in the database, then configure them in the MyProjectNameEfCoreEntityExtensionMappings * * Example: * @@ -21,7 +24,7 @@ namespace MyCompanyName.MyProjectName.MongoDB * .AddOrUpdateProperty("Title"); * * See the documentation for more: - * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities + * https://docs.abp.io/en/abp/latest/Object-Extensions */ }); } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Users/AppUser.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Users/AppUser.cs index 6fafd6b76d..cd5c8dbb3d 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Users/AppUser.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Users/AppUser.cs @@ -48,7 +48,7 @@ namespace MyCompanyName.MyProjectName.Users * * 1. update MyProjectNameDbContext.OnModelCreating * to configure the mapping for your new property - * 2. Update MyProjectNameEntityExtensions to extend the IdentityUser entity + * 2. Update MyProjectNameEfCoreEntityExtensionMappings to extend the IdentityUser entity * and add your new property to the migration. * 3. Use the Add-Migration to add a new database migration. * 4. Run the .DbMigrator project (or use the Update-Database command) to apply diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs index 7af1004924..62b57c1cc3 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs @@ -11,7 +11,7 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore { public MyProjectNameMigrationsDbContext CreateDbContext(string[] args) { - MyProjectNameEntityExtensions.Configure(); + MyProjectNameEfCoreEntityExtensionMappings.Configure(); var configuration = BuildConfiguration(); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs index 99c2585c75..e1478119be 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs @@ -46,7 +46,7 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore b.ConfigureAbpUser(); /* Configure mappings for your additional properties - * Also see the MyProjectNameEntityExtensions class + * Also see the MyProjectNameEfCoreEntityExtensionMappings class */ }); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityExtensions.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs similarity index 72% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityExtensions.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs index af1076ebda..12fb8eefc6 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityExtensions.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs @@ -4,7 +4,7 @@ using Volo.Abp.Threading; namespace MyCompanyName.MyProjectName.EntityFrameworkCore { - public static class MyProjectNameEntityExtensions + public static class MyProjectNameEfCoreEntityExtensionMappings { private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); @@ -15,6 +15,11 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore /* You can configure entity extension properties for the * entities defined in the used modules. * + * The properties defined here becomes table fields. + * If you want to use the ExtraProperties dictionary of the entity + * instead of creating a new field, then define the property in the + * MyProjectNameDomainObjectExtensions class. + * * Example: * * ObjectExtensionManager.Instance diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs index 4c231d0b98..0b4258dd18 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs @@ -29,7 +29,7 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore { public override void PreConfigureServices(ServiceConfigurationContext context) { - MyProjectNameEntityExtensions.Configure(); + MyProjectNameEfCoreEntityExtensionMappings.Configure(); } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameMongoDbModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameMongoDbModule.cs index c502d0f924..5d3bfabab5 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameMongoDbModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameMongoDbModule.cs @@ -24,11 +24,6 @@ namespace MyCompanyName.MyProjectName.MongoDB )] public class MyProjectNameMongoDbModule : AbpModule { - public override void PreConfigureServices(ServiceConfigurationContext context) - { - MyProjectNameEntityExtensions.Configure(); - } - public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddMongoDbContext(options => diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Program.cs index 5143e37164..b57311cc96 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Program.cs @@ -17,6 +17,7 @@ namespace MyCompanyName.MyProjectName.Web .MinimumLevel.Information() #endif .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() .WriteTo.Async(c => c.File("Logs/logs.txt")) .CreateLogger();