From f56695c2b33a537d43b85074878be765cd254941 Mon Sep 17 00:00:00 2001
From: gdlcf88 <47396430@qq.com>
Date: Wed, 29 Apr 2020 01:44:28 +0800
Subject: [PATCH] Change ProductDetail to an aggregate root and make it also
related to ProductSku, close #1
---
.../Dtos/CreateUpdateProductDetailDto.cs | 17 +
.../ProductDetails/Dtos/ProductDetailDto.cs | 10 +
.../IProductDetailAppService.cs | 19 +
.../Dtos/CreateUpdateProductDetailDto.cs | 12 -
.../Products/Dtos/CreateUpdateProductDto.cs | 6 +-
.../Products/Dtos/ProductDetailDto.cs | 9 -
.../Products/Products/Dtos/ProductDto.cs | 4 +-
.../Products/Products/Dtos/ProductSkuDto.cs | 2 +
.../ProductDetails/ProductDetailAppService.cs | 86 +
.../Products/Products/ProductAppService.cs | 29 +-
.../ProductsApplicationAutoMapperProfile.cs | 5 +-
.../Products/Localization/Products/cs.json | 3 +
.../Products/Localization/Products/en.json | 3 +
.../Products/Localization/Products/pl.json | 3 +
.../Products/Localization/Products/pt-BR.json | 3 +
.../Products/Localization/Products/sl.json | 3 +
.../Products/Localization/Products/tr.json | 3 +
.../Products/Localization/Products/vi.json | 3 +
.../Localization/Products/zh-Hans.json | 3 +
.../Localization/Products/zh-Hant.json | 3 +
.../IProductDetailRepository.cs | 11 +
.../Products/ProductDetails/ProductDetail.cs | 26 +
.../EShop/Products/Products/Product.cs | 7 +-
.../EShop/Products/Products/ProductDetail.cs | 29 -
.../EShop/Products/Products/ProductSku.cs | 6 +-
....EShop.Products.EntityFrameworkCore.csproj | 4 -
.../EShopProductsEntityFrameworkCoreModule.cs | 4 +-
.../EntityFrameworkCore/IProductsDbContext.cs | 1 +
.../EntityFrameworkCore/ProductsDbContext.cs | 1 +
...roductsDbContextModelCreatingExtensions.cs | 2 +-
.../ProductDetails/ProductDetailRepository.cs | 14 +
.../Products/Products/ProductRepository.cs | 1 -
.../Products/Product/CreateModal.cshtml.cs | 27 +-
.../Products/Product/EditModal.cshtml.cs | 28 +-
...ateEditProductAttributeOptionViewModel.cs} | 2 +-
...=> CreateEditProductAttributeViewModel.cs} | 4 +-
...cs => CreateEditProductDetailViewModel.cs} | 7 +-
.../ViewModels/CreateEditProductViewModel.cs | 2 +-
.../EShop/Products/Products/Product/index.js | 2 +-
.../ProductsWebAutoMapperProfile.cs | 18 +-
...4406_ProductEntitiesAdjustment.Designer.cs | 2398 +++++++++++++++++
...0200428164406_ProductEntitiesAdjustment.cs | 167 ++
...asyMallMigrationsDbContextModelSnapshot.cs | 81 +-
43 files changed, 2958 insertions(+), 110 deletions(-)
create mode 100644 modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductDetails/Dtos/CreateUpdateProductDetailDto.cs
create mode 100644 modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductDetails/Dtos/ProductDetailDto.cs
create mode 100644 modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductDetails/IProductDetailAppService.cs
delete mode 100644 modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/CreateUpdateProductDetailDto.cs
delete mode 100644 modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDetailDto.cs
create mode 100644 modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductDetails/ProductDetailAppService.cs
create mode 100644 modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductDetails/IProductDetailRepository.cs
create mode 100644 modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductDetails/ProductDetail.cs
delete mode 100644 modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductDetail.cs
create mode 100644 modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/ProductDetails/ProductDetailRepository.cs
rename modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/{CreateUpdateProductAttributeOptionViewModel.cs => CreateEditProductAttributeOptionViewModel.cs} (89%)
rename modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/{CreateUpdateProductAttributeViewModel.cs => CreateEditProductAttributeViewModel.cs} (77%)
rename modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/{CreateUpdateProductDetailViewModel.cs => CreateEditProductDetailViewModel.cs} (71%)
create mode 100644 samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore.DbMigrations/Migrations/20200428164406_ProductEntitiesAdjustment.Designer.cs
create mode 100644 samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore.DbMigrations/Migrations/20200428164406_ProductEntitiesAdjustment.cs
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductDetails/Dtos/CreateUpdateProductDetailDto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductDetails/Dtos/CreateUpdateProductDetailDto.cs
new file mode 100644
index 00000000..e388a3d4
--- /dev/null
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductDetails/Dtos/CreateUpdateProductDetailDto.cs
@@ -0,0 +1,17 @@
+using System;
+using System.ComponentModel;
+
+namespace EasyAbp.EShop.Products.ProductDetails.Dtos
+{
+ public class CreateUpdateProductDetailDto
+ {
+ ///
+ /// This property is for product management permission checking
+ ///
+ [DisplayName("ProductDetailStoreId")]
+ public Guid StoreId { get; set; }
+
+ [DisplayName("ProductDetailDescription")]
+ public string Description { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductDetails/Dtos/ProductDetailDto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductDetails/Dtos/ProductDetailDto.cs
new file mode 100644
index 00000000..3a89d3b1
--- /dev/null
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductDetails/Dtos/ProductDetailDto.cs
@@ -0,0 +1,10 @@
+using System;
+using Volo.Abp.Application.Dtos;
+
+namespace EasyAbp.EShop.Products.ProductDetails.Dtos
+{
+ public class ProductDetailDto : EntityDto
+ {
+ public string Description { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductDetails/IProductDetailAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductDetails/IProductDetailAppService.cs
new file mode 100644
index 00000000..bcde87e8
--- /dev/null
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/ProductDetails/IProductDetailAppService.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Threading.Tasks;
+using EasyAbp.EShop.Products.ProductDetails.Dtos;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Application.Services;
+
+namespace EasyAbp.EShop.Products.ProductDetails
+{
+ public interface IProductDetailAppService :
+ ICrudAppService<
+ ProductDetailDto,
+ Guid,
+ PagedAndSortedResultRequestDto,
+ CreateUpdateProductDetailDto,
+ CreateUpdateProductDetailDto>
+ {
+ Task DeleteAsync(Guid id, Guid storeId);
+ }
+}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/CreateUpdateProductDetailDto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/CreateUpdateProductDetailDto.cs
deleted file mode 100644
index 400d4c47..00000000
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/CreateUpdateProductDetailDto.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-using System;
-using System.ComponentModel;
-using System.ComponentModel.DataAnnotations;
-
-namespace EasyAbp.EShop.Products.Products.Dtos
-{
- public class CreateUpdateProductDetailDto
- {
- [DisplayName("ProductDetailDescription")]
- public string Description { get; set; }
- }
-}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/CreateUpdateProductDto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/CreateUpdateProductDto.cs
index 92167a9f..236bb02f 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/CreateUpdateProductDto.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/CreateUpdateProductDto.cs
@@ -8,10 +8,12 @@ namespace EasyAbp.EShop.Products.Products.Dtos
{
public class CreateUpdateProductDto : IValidatableObject
{
- [Required]
[DisplayName("ProductProductTypeId")]
public Guid ProductTypeId { get; set; }
+ [DisplayName("ProductDetailId")]
+ public Guid ProductDetailId { get; set; }
+
///
/// This property is set for adding the store to ProductStore in creation, or for permission checking in update.
///
@@ -25,8 +27,6 @@ namespace EasyAbp.EShop.Products.Products.Dtos
[DisplayName("ProductDisplayName")]
public string DisplayName { get; set; }
- public CreateUpdateProductDetailDto ProductDetail { get; set; }
-
public ICollection ProductAttributes { get; set; }
[DisplayName("ProductInventoryStrategy")]
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDetailDto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDetailDto.cs
deleted file mode 100644
index 4ccd4764..00000000
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDetailDto.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-using Volo.Abp.Application.Dtos;
-
-namespace EasyAbp.EShop.Products.Products.Dtos
-{
- public class ProductDetailDto : EntityDto
- {
- public string Description { get; set; }
- }
-}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDto.cs
index a35c63f3..bea979da 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDto.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductDto.cs
@@ -8,6 +8,8 @@ namespace EasyAbp.EShop.Products.Products.Dtos
{
public Guid ProductTypeId { get; set; }
+ public Guid ProductDetailId { get; set; }
+
public ICollection CategoryIds { get; set; }
public string DisplayName { get; set; }
@@ -20,8 +22,6 @@ namespace EasyAbp.EShop.Products.Products.Dtos
public bool IsPublished { get; set; }
- public ProductDetailDto ProductDetail { get; set; }
-
public ICollection ProductAttributes { get; set; }
public ICollection ProductSkus { get; set; }
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductSkuDto.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductSkuDto.cs
index 8dd8d594..6af28a23 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductSkuDto.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application.Contracts/EasyAbp/EShop/Products/Products/Dtos/ProductSkuDto.cs
@@ -16,5 +16,7 @@ namespace EasyAbp.EShop.Products.Products.Dtos
public int Sold { get; set; }
public int OrderMinQuantity { get; set; }
+
+ public Guid? ProductDetailId { get; set; }
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductDetails/ProductDetailAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductDetails/ProductDetailAppService.cs
new file mode 100644
index 00000000..7cffc59a
--- /dev/null
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductDetails/ProductDetailAppService.cs
@@ -0,0 +1,86 @@
+using System;
+using System.Threading.Tasks;
+using EasyAbp.EShop.Products.Authorization;
+using EasyAbp.EShop.Products.ProductDetails.Dtos;
+using EasyAbp.EShop.Products.Products;
+using EasyAbp.EShop.Products.ProductStores;
+using Volo.Abp;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Application.Services;
+
+namespace EasyAbp.EShop.Products.ProductDetails
+{
+ public class ProductDetailAppService : CrudAppService,
+ IProductDetailAppService
+ {
+ protected override string CreatePolicyName { get; set; } = ProductsPermissions.Products.Create;
+ protected override string DeletePolicyName { get; set; } = ProductsPermissions.Products.Delete;
+ protected override string UpdatePolicyName { get; set; } = ProductsPermissions.Products.Update;
+ protected override string GetPolicyName { get; set; } = ProductsPermissions.Products.Default;
+ protected override string GetListPolicyName { get; set; } = ProductsPermissions.Products.Default;
+
+ private readonly IProductRepository _productRepository;
+ private readonly IProductStoreRepository _productStoreRepository;
+ private readonly IProductDetailRepository _repository;
+
+ public ProductDetailAppService(
+ IProductRepository productRepository,
+ IProductStoreRepository productStoreRepository,
+ IProductDetailRepository repository) : base(repository)
+ {
+ _productRepository = productRepository;
+ _productStoreRepository = productStoreRepository;
+ _repository = repository;
+ }
+
+ public override async Task UpdateAsync(Guid id, CreateUpdateProductDetailDto input)
+ {
+ await CheckUpdatePolicyAsync();
+
+ var product = await _productRepository.GetAsync(x => x.ProductDetailId == id);
+
+ await CheckStoreIsProductOwnerAsync(product.Id, input.StoreId);
+
+ var detail = await GetEntityByIdAsync(id);
+
+ MapToEntity(input, detail);
+
+ await Repository.UpdateAsync(detail, autoSave: true);
+
+ return MapToGetOutputDto(detail);
+ }
+
+ public virtual async Task DeleteAsync(Guid id, Guid storeId)
+ {
+ await CheckDeletePolicyAsync();
+
+ var product = await _productRepository.GetAsync(x => x.ProductDetailId == id);
+
+ await CheckStoreIsProductOwnerAsync(product.Id, storeId);
+
+ await Repository.DeleteAsync(id);
+ }
+
+ [RemoteService(false)]
+ public override Task DeleteAsync(Guid id)
+ {
+ throw new NotImplementedException();
+ }
+
+ [RemoteService(false)]
+ public override Task> GetListAsync(PagedAndSortedResultRequestDto input)
+ {
+ throw new NotImplementedException();
+ }
+
+ protected virtual async Task CheckStoreIsProductOwnerAsync(Guid productId, Guid storeId)
+ {
+ var productStore = await _productStoreRepository.GetAsync(productId, storeId);
+
+ if (!productStore.IsOwner)
+ {
+ throw new StoreIsNotProductOwnerException(productId, storeId);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs
index a519eaca..b0d16005 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/Products/ProductAppService.cs
@@ -4,10 +4,12 @@ using System.Linq;
using System.Threading.Tasks;
using EasyAbp.EShop.Products.Authorization;
using EasyAbp.EShop.Products.ProductCategories;
+using EasyAbp.EShop.Products.ProductDetails;
using EasyAbp.EShop.Products.Products.Dtos;
using EasyAbp.EShop.Products.ProductStores;
using Volo.Abp;
using Volo.Abp.Application.Services;
+using Volo.Abp.Domain.Entities;
namespace EasyAbp.EShop.Products.Products
{
@@ -53,6 +55,8 @@ namespace EasyAbp.EShop.Products.Products
await Repository.InsertAsync(product, autoSave: true);
+ await CheckProductDetailIdAsync(product.Id, input.ProductDetailId);
+
await AddProductToStoreAsync(product.Id, input.StoreId);
await UpdateProductCategoriesAsync(product.Id, input.CategoryIds);
@@ -60,6 +64,19 @@ namespace EasyAbp.EShop.Products.Products
return MapToGetOutputDto(product);
}
+ private async Task CheckProductDetailIdAsync(Guid currentProductId, Guid desiredProductDetailId)
+ {
+ var otherOwner = await _repository.FindAsync(x =>
+ x.ProductDetailId == desiredProductDetailId && x.Id != currentProductId);
+
+ // Todo: should also check ProductSku owner
+
+ if (otherOwner != null)
+ {
+ throw new EntityNotFoundException(typeof(ProductDetail), desiredProductDetailId);
+ }
+ }
+
protected virtual async Task AddProductToStoreAsync(Guid productId, Guid storeId)
{
await _productStoreRepository.InsertAsync(new ProductStore(GuidGenerator.Create(), CurrentTenant.Id,
@@ -71,7 +88,7 @@ namespace EasyAbp.EShop.Products.Products
await CheckUpdatePolicyAsync();
await CheckStoreIsProductOwnerAsync(id, input.StoreId);
-
+
var product = await GetEntityByIdAsync(id);
MapToEntity(input, product);
@@ -80,18 +97,20 @@ namespace EasyAbp.EShop.Products.Products
await Repository.UpdateAsync(product, autoSave: true);
+ await CheckProductDetailIdAsync(product.Id, input.ProductDetailId);
+
await UpdateProductCategoriesAsync(product.Id, input.CategoryIds);
return MapToGetOutputDto(product);
}
- protected virtual async Task CheckStoreIsProductOwnerAsync(Guid id, Guid storeId)
+ protected virtual async Task CheckStoreIsProductOwnerAsync(Guid productId, Guid storeId)
{
- var productStore = await _productStoreRepository.GetAsync(id, storeId);
+ var productStore = await _productStoreRepository.GetAsync(productId, storeId);
if (!productStore.IsOwner)
{
- throw new StoreIsNotProductOwnerException(id, storeId);
+ throw new StoreIsNotProductOwnerException(productId, storeId);
}
}
@@ -134,7 +153,7 @@ namespace EasyAbp.EShop.Products.Products
product.ProductAttributes.RemoveAll(a => exceptAttributeNames.Contains(a.DisplayName));
}
- [RemoteService(IsMetadataEnabled = false)]
+ [RemoteService(false)]
public override async Task DeleteAsync(Guid id)
{
throw new NotImplementedException();
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductsApplicationAutoMapperProfile.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductsApplicationAutoMapperProfile.cs
index b80658dd..bed0a851 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductsApplicationAutoMapperProfile.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Application/EasyAbp/EShop/Products/ProductsApplicationAutoMapperProfile.cs
@@ -7,6 +7,8 @@ using EasyAbp.EShop.Products.ProductTypes.Dtos;
using EasyAbp.EShop.Products.ProductCategories;
using EasyAbp.EShop.Products.ProductCategories.Dtos;
using AutoMapper;
+using EasyAbp.EShop.Products.ProductDetails;
+using EasyAbp.EShop.Products.ProductDetails.Dtos;
using Volo.Abp.AutoMapper;
namespace EasyAbp.EShop.Products
@@ -29,7 +31,8 @@ namespace EasyAbp.EShop.Products
.ForSourceMember(dto => dto.CategoryIds, opt => opt.DoNotValidate())
.Ignore(p => p.ProductAttributes)
.Ignore(p => p.ProductSkus);
- CreateMap(MemberList.Source);
+ CreateMap(MemberList.Source)
+ .ForSourceMember(dto => dto.StoreId, opt => opt.DoNotValidate());
CreateMap(MemberList.Source);
CreateMap(MemberList.Source);
CreateMap();
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json
index d0927003..79916d28 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/cs.json
@@ -5,8 +5,11 @@
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
+ "ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductDisplayName": "ProductDisplayName",
+ "ProductDetailProductId": "ProductDetailProductId",
+ "ProductDetailProductSkuId": "ProductDetailProductSkuId",
"ProductDetailDescription": "ProductDetailDescription",
"ProductDetailDisplayOrder": "ProductDetailDisplayOrder",
"ProductAttributeNames": "ProductAttributeNames",
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json
index f0ecd230..dd6924d6 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/en.json
@@ -6,8 +6,11 @@
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
+ "ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductDisplayName": "ProductDisplayName",
+ "ProductDetailProductId": "ProductDetailProductId",
+ "ProductDetailProductSkuId": "ProductDetailProductSkuId",
"ProductDetailDescription": "ProductDetailDescription",
"ProductDetailDisplayOrder": "ProductDetailDisplayOrder",
"ProductAttributeNames": "ProductAttributeNames",
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json
index d9844d18..d23e564d 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pl.json
@@ -5,8 +5,11 @@
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
+ "ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductDisplayName": "ProductDisplayName",
+ "ProductDetailProductId": "ProductDetailProductId",
+ "ProductDetailProductSkuId": "ProductDetailProductSkuId",
"ProductDetailDescription": "ProductDetailDescription",
"ProductDetailDisplayOrder": "ProductDetailDisplayOrder",
"ProductAttributeNames": "ProductAttributeNames",
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json
index 0841bcfb..94621020 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/pt-BR.json
@@ -5,8 +5,11 @@
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
+ "ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductDisplayName": "ProductDisplayName",
+ "ProductDetailProductId": "ProductDetailProductId",
+ "ProductDetailProductSkuId": "ProductDetailProductSkuId",
"ProductDetailDescription": "ProductDetailDescription",
"ProductDetailDisplayOrder": "ProductDetailDisplayOrder",
"ProductAttributeNames": "ProductAttributeNames",
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json
index 02e0bb3b..68fba77c 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/sl.json
@@ -6,8 +6,11 @@
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
+ "ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductDisplayName": "ProductDisplayName",
+ "ProductDetailProductId": "ProductDetailProductId",
+ "ProductDetailProductSkuId": "ProductDetailProductSkuId",
"ProductDetailDescription": "ProductDetailDescription",
"ProductDetailDisplayOrder": "ProductDetailDisplayOrder",
"ProductAttributeNames": "ProductAttributeNames",
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json
index dc4094c6..8ffd90f7 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/tr.json
@@ -6,8 +6,11 @@
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
+ "ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductDisplayName": "ProductDisplayName",
+ "ProductDetailProductId": "ProductDetailProductId",
+ "ProductDetailProductSkuId": "ProductDetailProductSkuId",
"ProductDetailDescription": "ProductDetailDescription",
"ProductDetailDisplayOrder": "ProductDetailDisplayOrder",
"ProductAttributeNames": "ProductAttributeNames",
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json
index 873078c0..72b1bf67 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/vi.json
@@ -5,8 +5,11 @@
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
+ "ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductDisplayName": "ProductDisplayName",
+ "ProductDetailProductId": "ProductDetailProductId",
+ "ProductDetailProductSkuId": "ProductDetailProductSkuId",
"ProductDetailDescription": "ProductDetailDescription",
"ProductDetailDisplayOrder": "ProductDetailDisplayOrder",
"ProductAttributeNames": "ProductAttributeNames",
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hans.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hans.json
index 21e0674a..384123b1 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hans.json
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hans.json
@@ -6,8 +6,11 @@
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
+ "ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductDisplayName": "ProductDisplayName",
+ "ProductDetailProductId": "ProductDetailProductId",
+ "ProductDetailProductSkuId": "ProductDetailProductSkuId",
"ProductDetailDescription": "ProductDetailDescription",
"ProductDetailDisplayOrder": "ProductDetailDisplayOrder",
"ProductAttributeNames": "ProductAttributeNames",
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hant.json b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hant.json
index bab4e90d..fef533cd 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hant.json
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/EasyAbp/EShop/Products/Localization/Products/zh-Hant.json
@@ -6,8 +6,11 @@
"Product": "Product",
"ProductStore": "ProductStore",
"ProductProductTypeId": "ProductProductTypeId",
+ "ProductDetailId": "ProductDetailId",
"ProductProductStoreId": "ProductProductStoreId",
"ProductDisplayName": "ProductDisplayName",
+ "ProductDetailProductId": "ProductDetailProductId",
+ "ProductDetailProductSkuId": "ProductDetailProductSkuId",
"ProductDetailDescription": "ProductDetailDescription",
"ProductDetailDisplayOrder": "ProductDetailDisplayOrder",
"ProductAttributeNames": "ProductAttributeNames",
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductDetails/IProductDetailRepository.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductDetails/IProductDetailRepository.cs
new file mode 100644
index 00000000..2e1871fd
--- /dev/null
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductDetails/IProductDetailRepository.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Linq;
+using EasyAbp.EShop.Products.Products;
+using Volo.Abp.Domain.Repositories;
+
+namespace EasyAbp.EShop.Products.ProductDetails
+{
+ public interface IProductDetailRepository : IRepository
+ {
+ }
+}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductDetails/ProductDetail.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductDetails/ProductDetail.cs
new file mode 100644
index 00000000..c9134ced
--- /dev/null
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/ProductDetails/ProductDetail.cs
@@ -0,0 +1,26 @@
+using System;
+using JetBrains.Annotations;
+using Volo.Abp.Domain.Entities.Auditing;
+
+namespace EasyAbp.EShop.Products.ProductDetails
+{
+ public class ProductDetail : FullAuditedAggregateRoot
+ {
+ [CanBeNull]
+ public virtual string Description { get; protected set; }
+
+ protected ProductDetail() {}
+
+ public ProductDetail(
+ Guid id,
+ [CanBeNull] string description) : base(id)
+ {
+ Description = description;
+ }
+
+ public void SetDescription(string description)
+ {
+ Description = description;
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/Product.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/Product.cs
index b1eeae55..8af45ba7 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/Product.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/Product.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using EasyAbp.EShop.Products.ProductDetails;
using JetBrains.Annotations;
using Volo.Abp.Domain.Entities.Auditing;
@@ -9,6 +10,8 @@ namespace EasyAbp.EShop.Products.Products
{
public virtual Guid ProductTypeId { get; protected set; }
+ public virtual Guid ProductDetailId { get; protected set; }
+
[NotNull]
public virtual string DisplayName { get; protected set; }
@@ -21,8 +24,6 @@ namespace EasyAbp.EShop.Products.Products
public virtual bool IsPublished { get; protected set; }
- public virtual ProductDetail ProductDetail { get; protected set; }
-
public virtual ICollection ProductAttributes { get; protected set; }
public virtual ICollection ProductSkus { get; protected set; }
@@ -36,6 +37,7 @@ namespace EasyAbp.EShop.Products.Products
public Product(
Guid id,
Guid productTypeId,
+ Guid productDetailId,
string displayName,
InventoryStrategy inventoryStrategy,
bool isPublished,
@@ -44,6 +46,7 @@ namespace EasyAbp.EShop.Products.Products
) :base(id)
{
ProductTypeId = productTypeId;
+ ProductDetailId = productDetailId;
DisplayName = displayName;
InventoryStrategy = inventoryStrategy;
IsPublished = isPublished;
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductDetail.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductDetail.cs
deleted file mode 100644
index 7584ba56..00000000
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductDetail.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-using System;
-using JetBrains.Annotations;
-using Volo.Abp.Domain.Entities;
-
-namespace EasyAbp.EShop.Products.Products
-{
- public class ProductDetail : Entity
- {
- public virtual Guid ProductId { get; protected set; }
-
- [CanBeNull]
- public virtual string Description { get; protected set; }
-
- protected ProductDetail() {}
-
- public ProductDetail(
- Guid productId,
- [CanBeNull] string description)
- {
- ProductId = productId;
- Description = description;
- }
-
- public override object[] GetKeys()
- {
- return new object[] {ProductId};
- }
- }
-}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductSku.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductSku.cs
index 5005f1e1..e18d46f7 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductSku.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain/EasyAbp/EShop/Products/Products/ProductSku.cs
@@ -21,6 +21,8 @@ namespace EasyAbp.EShop.Products.Products
public virtual int Sold { get; protected set; }
public virtual int OrderMinQuantity { get; protected set; }
+
+ public Guid? ProductDetailId { get; set; }
protected ProductSku() {}
@@ -32,7 +34,8 @@ namespace EasyAbp.EShop.Products.Products
decimal price,
int inventory,
int sold,
- int orderMinQuantity) : base(id)
+ int orderMinQuantity,
+ Guid? productDetailId) : base(id)
{
SerializedAttributeOptionIds = serializedAttributeOptionIds;
Currency = currency;
@@ -41,6 +44,7 @@ namespace EasyAbp.EShop.Products.Products
Inventory = inventory;
Sold = sold;
OrderMinQuantity = orderMinQuantity;
+ ProductDetailId = productDetailId;
}
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp.EShop.Products.EntityFrameworkCore.csproj b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp.EShop.Products.EntityFrameworkCore.csproj
index 88ea939a..47fe1809 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp.EShop.Products.EntityFrameworkCore.csproj
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp.EShop.Products.EntityFrameworkCore.csproj
@@ -12,8 +12,4 @@
-
-
-
-
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/EShopProductsEntityFrameworkCoreModule.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/EShopProductsEntityFrameworkCoreModule.cs
index 5213d76d..ba907e32 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/EShopProductsEntityFrameworkCoreModule.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/EShopProductsEntityFrameworkCoreModule.cs
@@ -2,6 +2,7 @@ using EasyAbp.EShop.Products.ProductStores;
using EasyAbp.EShop.Products.ProductCategories;
using EasyAbp.EShop.Products.ProductTypes;
using EasyAbp.EShop.Products.Categories;
+using EasyAbp.EShop.Products.ProductDetails;
using EasyAbp.EShop.Products.Products;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.EntityFrameworkCore;
@@ -22,8 +23,9 @@ namespace EasyAbp.EShop.Products.EntityFrameworkCore
/* Add custom repositories here. Example:
* options.AddRepository();
*/
- options.AddRepository();
options.AddRepository();
+ options.AddRepository();
+ options.AddRepository();
options.AddRepository();
options.AddRepository();
options.AddRepository();
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/IProductsDbContext.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/IProductsDbContext.cs
index 8bdfff1e..5d8a0cb8 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/IProductsDbContext.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/IProductsDbContext.cs
@@ -5,6 +5,7 @@ using EasyAbp.EShop.Products.Products;
using EasyAbp.EShop.Products.Categories;
using EasyAbp.EShop.Products.ProductTypes;
using EasyAbp.EShop.Products.ProductCategories;
+using EasyAbp.EShop.Products.ProductDetails;
using EasyAbp.EShop.Products.ProductStores;
namespace EasyAbp.EShop.Products.EntityFrameworkCore
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContext.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContext.cs
index 2249ad50..9bc46f56 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContext.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContext.cs
@@ -5,6 +5,7 @@ using EasyAbp.EShop.Products.Products;
using EasyAbp.EShop.Products.Categories;
using EasyAbp.EShop.Products.ProductTypes;
using EasyAbp.EShop.Products.ProductCategories;
+using EasyAbp.EShop.Products.ProductDetails;
using EasyAbp.EShop.Products.ProductStores;
namespace EasyAbp.EShop.Products.EntityFrameworkCore
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContextModelCreatingExtensions.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContextModelCreatingExtensions.cs
index 94115414..7d78f917 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContextModelCreatingExtensions.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/EntityFrameworkCore/ProductsDbContextModelCreatingExtensions.cs
@@ -4,6 +4,7 @@ using EasyAbp.EShop.Products.ProductTypes;
using EasyAbp.EShop.Products.Categories;
using EasyAbp.EShop.Products.Products;
using System;
+using EasyAbp.EShop.Products.ProductDetails;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.EntityFrameworkCore.Modeling;
@@ -57,7 +58,6 @@ namespace EasyAbp.EShop.Products.EntityFrameworkCore
b.ToTable(options.TablePrefix + "ProductDetails", options.Schema);
b.ConfigureByConvention();
/* Configure more properties here */
- b.HasKey(x => new { x.ProductId });
});
builder.Entity(b =>
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/ProductDetails/ProductDetailRepository.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/ProductDetails/ProductDetailRepository.cs
new file mode 100644
index 00000000..6744edb5
--- /dev/null
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/ProductDetails/ProductDetailRepository.cs
@@ -0,0 +1,14 @@
+using System;
+using EasyAbp.EShop.Products.EntityFrameworkCore;
+using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore;
+
+namespace EasyAbp.EShop.Products.ProductDetails
+{
+ public class ProductDetailRepository : EfCoreRepository, IProductDetailRepository
+ {
+ public ProductDetailRepository(IDbContextProvider dbContextProvider) : base(dbContextProvider)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/Products/ProductRepository.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/Products/ProductRepository.cs
index a3196a53..0ffad2ac 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/Products/ProductRepository.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.EntityFrameworkCore/EasyAbp/EShop/Products/Products/ProductRepository.cs
@@ -16,7 +16,6 @@ namespace EasyAbp.EShop.Products.Products
public override IQueryable WithDetails()
{
return base.WithDetails()
- .Include(x => x.ProductDetail)
.Include(x => x.ProductAttributes).ThenInclude(x => x.ProductAttributeOptions)
.Include(x => x.ProductSkus);
}
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/CreateModal.cshtml.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/CreateModal.cshtml.cs
index 5bdc373f..d2ae17e4 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/CreateModal.cshtml.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/CreateModal.cshtml.cs
@@ -4,6 +4,8 @@ using System.Linq;
using System.Threading.Tasks;
using EasyAbp.EShop.Products.Categories;
using EasyAbp.EShop.Products.Categories.Dtos;
+using EasyAbp.EShop.Products.ProductDetails;
+using EasyAbp.EShop.Products.ProductDetails.Dtos;
using EasyAbp.EShop.Products.Products;
using EasyAbp.EShop.Products.Products.Dtos;
using EasyAbp.EShop.Products.ProductTypes;
@@ -16,6 +18,9 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product
{
public class CreateModalModel : ProductsPageModel
{
+ [BindProperty(SupportsGet = true)]
+ public Guid StoreId { get; set; }
+
[BindProperty]
public CreateEditProductViewModel Product { get; set; }
@@ -25,19 +30,22 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product
private readonly IProductTypeAppService _productTypeAppService;
private readonly ICategoryAppService _categoryAppService;
+ private readonly IProductDetailAppService _productDetailAppService;
private readonly IProductAppService _service;
public CreateModalModel(
IProductTypeAppService productTypeAppService,
ICategoryAppService categoryAppService,
+ IProductDetailAppService productDetailAppService,
IProductAppService service)
{
_productTypeAppService = productTypeAppService;
_categoryAppService = categoryAppService;
+ _productDetailAppService = productDetailAppService;
_service = service;
}
- public virtual async Task OnGetAsync(Guid storeId, Guid? categoryId)
+ public virtual async Task OnGetAsync(Guid? categoryId)
{
ProductTypes =
(await _productTypeAppService.GetListAsync(new PagedAndSortedResultRequestDto
@@ -51,7 +59,11 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product
Product = new CreateEditProductViewModel
{
- StoreId = storeId
+ StoreId = StoreId,
+ ProductDetail = new CreateEditProductDetailViewModel
+ {
+ StoreId = StoreId
+ }
};
if (categoryId.HasValue)
@@ -62,7 +74,16 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product
public virtual async Task OnPostAsync()
{
- await _service.CreateAsync(ObjectMapper.Map(Product));
+ var detail = await _productDetailAppService.CreateAsync(
+ ObjectMapper
+ .Map(Product.ProductDetail));
+
+ var createDto = ObjectMapper.Map(Product);
+
+ createDto.ProductDetailId = detail.Id;
+
+ var product = await _service.CreateAsync(createDto);
+
return NoContent();
}
}
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/EditModal.cshtml.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/EditModal.cshtml.cs
index 1765f3d2..e8e8aedd 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/EditModal.cshtml.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/EditModal.cshtml.cs
@@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using EasyAbp.EShop.Products.Categories;
+using EasyAbp.EShop.Products.ProductDetails;
+using EasyAbp.EShop.Products.ProductDetails.Dtos;
using Microsoft.AspNetCore.Mvc;
using EasyAbp.EShop.Products.Products;
using EasyAbp.EShop.Products.Products.Dtos;
@@ -28,15 +30,18 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product
private readonly IProductTypeAppService _productTypeAppService;
private readonly ICategoryAppService _categoryAppService;
+ private readonly IProductDetailAppService _productDetailAppService;
private readonly IProductAppService _service;
public EditModalModel(
IProductTypeAppService productTypeAppService,
ICategoryAppService categoryAppService,
+ IProductDetailAppService productDetailAppService,
IProductAppService service)
{
_productTypeAppService = productTypeAppService;
_categoryAppService = categoryAppService;
+ _productDetailAppService = productDetailAppService;
_service = service;
}
@@ -53,16 +58,35 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product
.Select(dto => new SelectListItem(dto.DisplayName, dto.Id.ToString())).ToList();
var productDto = await _service.GetAsync(Id);
+
+ var detailDto = await _productDetailAppService.GetAsync(productDto.ProductDetailId);
Product = ObjectMapper.Map(productDto);
+
+ Product.ProductDetail = new CreateEditProductDetailViewModel
+ {
+ StoreId = storeId,
+ Description = detailDto.Description
+ };
Product.StoreId = storeId;
}
public virtual async Task OnPostAsync()
{
- await _service.UpdateAsync(Id,
- ObjectMapper.Map(Product));
+ var product = await _service.GetAsync(Id);
+
+ var detail = await _productDetailAppService.GetAsync(product.ProductDetailId);
+
+ await _productDetailAppService.UpdateAsync(detail.Id,
+ ObjectMapper
+ .Map(Product.ProductDetail));
+
+ var updateProductDto = ObjectMapper.Map(Product);
+
+ updateProductDto.ProductDetailId = detail.Id;
+
+ await _service.UpdateAsync(Id, updateProductDto);
return NoContent();
}
}
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateUpdateProductAttributeOptionViewModel.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductAttributeOptionViewModel.cs
similarity index 89%
rename from modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateUpdateProductAttributeOptionViewModel.cs
rename to modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductAttributeOptionViewModel.cs
index f4801f00..0eb06848 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateUpdateProductAttributeOptionViewModel.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductAttributeOptionViewModel.cs
@@ -2,7 +2,7 @@
namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product.ViewModels
{
- public class CreateUpdateProductAttributeOptionViewModel
+ public class CreateEditProductAttributeOptionViewModel
{
[Required]
[Display(Name = "ProductAttributeOptionDisplayName")]
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateUpdateProductAttributeViewModel.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductAttributeViewModel.cs
similarity index 77%
rename from modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateUpdateProductAttributeViewModel.cs
rename to modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductAttributeViewModel.cs
index 19128d94..a47c53fc 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateUpdateProductAttributeViewModel.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductAttributeViewModel.cs
@@ -3,7 +3,7 @@ using System.ComponentModel.DataAnnotations;
namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product.ViewModels
{
- public class CreateUpdateProductAttributeViewModel
+ public class CreateEditProductAttributeViewModel
{
[Required]
[Display(Name = "ProductAttributeDisplayName")]
@@ -15,6 +15,6 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product.ViewM
[Display(Name = "ProductAttributeDisplayOrder")]
public int DisplayOrder { get; set; } = 0;
- public List ProductAttributeOptions { get; set; }
+ public List ProductAttributeOptions { get; set; }
}
}
\ No newline at end of file
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateUpdateProductDetailViewModel.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductDetailViewModel.cs
similarity index 71%
rename from modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateUpdateProductDetailViewModel.cs
rename to modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductDetailViewModel.cs
index c07134d8..4714b818 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateUpdateProductDetailViewModel.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductDetailViewModel.cs
@@ -4,12 +4,17 @@ using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using EasyAbp.EShop.Products.Products;
using EasyAbp.EShop.Products.Products.Dtos;
+using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form;
namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product.ViewModels
{
- public class CreateUpdateProductDetailViewModel
+ public class CreateEditProductDetailViewModel
{
+ [HiddenInput]
+ [Display(Name = "ProductStore")]
+ public Guid StoreId { get; set; }
+
[TextArea(Rows = 4)]
[Display(Name = "ProductDetailDescription")]
public string Description { get; set; }
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductViewModel.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductViewModel.cs
index d1733b88..9f208c9a 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductViewModel.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/ViewModels/CreateEditProductViewModel.cs
@@ -28,7 +28,7 @@ namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product.ViewM
[Display(Name = "ProductDisplayName")]
public string DisplayName { get; set; }
- public CreateUpdateProductDetailViewModel ProductDetail { get; set; }
+ public CreateEditProductDetailViewModel ProductDetail { get; set; }
[Required]
[Placeholder("ProductAttributeNamesPlaceholder")]
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/index.js b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/index.js
index 99e46ac0..a6b868da 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/index.js
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/Pages/EShop/Products/Products/Product/index.js
@@ -34,7 +34,7 @@ $(function () {
return l('ProductDeletionConfirmationMessage', data.record.id);
},
action: function (data) {
- service.delete({ id: data.record.id, storeId: storeId })
+ service.delete(data.record.id, storeId)
.then(function () {
abp.notify.info(l('SuccessfullyDeleted'));
dataTable.ajax.reload();
diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/ProductsWebAutoMapperProfile.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/ProductsWebAutoMapperProfile.cs
index 109d414f..1af554db 100644
--- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/ProductsWebAutoMapperProfile.cs
+++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Web/ProductsWebAutoMapperProfile.cs
@@ -5,6 +5,7 @@ using EasyAbp.EShop.Products.Products.Dtos;
using EasyAbp.EShop.Products.Categories.Dtos;
using EasyAbp.EShop.Products.ProductTypes.Dtos;
using AutoMapper;
+using EasyAbp.EShop.Products.ProductDetails.Dtos;
using EasyAbp.EShop.Products.Web.Pages.EShop.Products.Products.Product.ViewModels;
using Volo.Abp.AutoMapper;
@@ -18,7 +19,9 @@ namespace EasyAbp.EShop.Products.Web
* Alternatively, you can split your mapping configurations
* into multiple profile classes for a better organization. */
CreateMap()
+ .Ignore(dto => dto.ProductDetail)
.Ignore(dto => dto.StoreId)
+ .ForSourceMember(dto => dto.ProductDetailId, opt => opt.DoNotValidate())
// .Ignore(x => x.ProductAttributes);
.ForMember(dest => dest.ProductAttributeNames,
opt => opt.MapFrom(source =>
@@ -29,6 +32,8 @@ namespace EasyAbp.EShop.Products.Web
.Select(a => a.ProductAttributeOptions.Select(o => o.DisplayName).JoinAsString(","))
.JoinAsString(Environment.NewLine)));
CreateMap()
+ .Ignore(dto => dto.ProductDetailId)
+ .ForSourceMember(model => model.ProductDetail, opt => opt.DoNotValidate())
.ForMember(dest => dest.ProductAttributes,
opt => opt.MapFrom(x =>
x.ProductAttributeNames.Split(",", StringSplitOptions.RemoveEmptyEntries).Select((s, i) =>
@@ -40,12 +45,13 @@ namespace EasyAbp.EShop.Products.Web
.Split(",", StringSplitOptions.RemoveEmptyEntries).Select(o =>
new CreateUpdateProductAttributeOptionDto {DisplayName = o}))
})));
- CreateMap();
- CreateMap();
- CreateMap();
- CreateMap();
- CreateMap();
- CreateMap();
+ CreateMap()
+ .Ignore(model => model.StoreId);
+ CreateMap();
+ CreateMap();
+ CreateMap();
+ CreateMap();
+ CreateMap();
CreateMap();
CreateMap();
}
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore.DbMigrations/Migrations/20200428164406_ProductEntitiesAdjustment.Designer.cs b/samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore.DbMigrations/Migrations/20200428164406_ProductEntitiesAdjustment.Designer.cs
new file mode 100644
index 00000000..f66e085d
--- /dev/null
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore.DbMigrations/Migrations/20200428164406_ProductEntitiesAdjustment.Designer.cs
@@ -0,0 +1,2398 @@
+//
+using System;
+using EasyMall.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+namespace EasyMall.Migrations
+{
+ [DbContext(typeof(EasyMallMigrationsDbContext))]
+ [Migration("20200428164406_ProductEntitiesAdjustment")]
+ partial class ProductEntitiesAdjustment
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "3.1.2")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128)
+ .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
+
+ modelBuilder.Entity("EasyAbp.EShop.Products.Categories.Category", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeleterId")
+ .HasColumnName("DeleterId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeletionTime")
+ .HasColumnName("DeletionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DisplayName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("IsDeleted")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("MediaResources")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ParentCategoryId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TenantId")
+ .HasColumnName("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.ToTable("ProductsCategories");
+ });
+
+ modelBuilder.Entity("EasyAbp.EShop.Products.ProductCategories.ProductCategory", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CategoryId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DisplayOrder")
+ .HasColumnType("int");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ProductId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TenantId")
+ .HasColumnName("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.ToTable("ProductsProductCategories");
+ });
+
+ modelBuilder.Entity("EasyAbp.EShop.Products.ProductDetails.ProductDetail", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeleterId")
+ .HasColumnName("DeleterId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeletionTime")
+ .HasColumnName("DeletionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("IsDeleted")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.ToTable("ProductsProductDetails");
+ });
+
+ modelBuilder.Entity("EasyAbp.EShop.Products.ProductStores.ProductStore", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeleterId")
+ .HasColumnName("DeleterId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeletionTime")
+ .HasColumnName("DeletionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("IsDeleted")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("IsOwner")
+ .HasColumnType("bit");
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ProductId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("StoreId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TenantId")
+ .HasColumnName("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.ToTable("ProductsProductStores");
+ });
+
+ modelBuilder.Entity("EasyAbp.EShop.Products.ProductTypes.ProductType", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeleterId")
+ .HasColumnName("DeleterId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeletionTime")
+ .HasColumnName("DeletionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DisplayName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("IsDeleted")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("MultiTenancySide")
+ .HasColumnType("int");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("ProductsProductTypes");
+ });
+
+ modelBuilder.Entity("EasyAbp.EShop.Products.Products.Product", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeleterId")
+ .HasColumnName("DeleterId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeletionTime")
+ .HasColumnName("DeletionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("DisplayName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DisplayOrder")
+ .HasColumnType("int");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("InventoryStrategy")
+ .HasColumnType("int");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("IsDeleted")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("IsPublished")
+ .HasColumnType("bit");
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("MediaResources")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("ProductDetailId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ProductTypeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.ToTable("ProductsProducts");
+ });
+
+ modelBuilder.Entity("EasyAbp.EShop.Products.Products.ProductAttribute", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeleterId")
+ .HasColumnName("DeleterId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeletionTime")
+ .HasColumnName("DeletionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DisplayName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DisplayOrder")
+ .HasColumnType("int");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("IsDeleted")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ProductId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ProductId");
+
+ b.ToTable("ProductsProductAttributes");
+ });
+
+ modelBuilder.Entity("EasyAbp.EShop.Products.Products.ProductAttributeOption", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeleterId")
+ .HasColumnName("DeleterId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeletionTime")
+ .HasColumnName("DeletionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Description")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DisplayName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DisplayOrder")
+ .HasColumnType("int");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("IsDeleted")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ProductAttributeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ProductAttributeId");
+
+ b.ToTable("ProductsProductAttributeOptions");
+ });
+
+ modelBuilder.Entity("EasyAbp.EShop.Products.Products.ProductSku", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Currency")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DeleterId")
+ .HasColumnName("DeleterId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeletionTime")
+ .HasColumnName("DeletionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Inventory")
+ .HasColumnType("int");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("IsDeleted")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("OrderMinQuantity")
+ .HasColumnType("int");
+
+ b.Property("OriginalPrice")
+ .HasColumnType("decimal(18,6)");
+
+ b.Property("Price")
+ .HasColumnType("decimal(18,6)");
+
+ b.Property("ProductDetailId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ProductId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("SerializedAttributeOptionIds")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Sold")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ProductId");
+
+ b.ToTable("ProductsProductSkus");
+ });
+
+ modelBuilder.Entity("EasyAbp.EShop.Stores.Stores.Store", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("CreatorId")
+ .HasColumnName("CreatorId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeleterId")
+ .HasColumnName("DeleterId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("DeletionTime")
+ .HasColumnName("DeletionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("IsDeleted")
+ .ValueGeneratedOnAdd()
+ .HasColumnName("IsDeleted")
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("LastModificationTime")
+ .HasColumnName("LastModificationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("LastModifierId")
+ .HasColumnName("LastModifierId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TenantId")
+ .HasColumnName("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.ToTable("StoresStores");
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ApplicationName")
+ .HasColumnName("ApplicationName")
+ .HasColumnType("nvarchar(96)")
+ .HasMaxLength(96);
+
+ b.Property("BrowserInfo")
+ .HasColumnName("BrowserInfo")
+ .HasColumnType("nvarchar(512)")
+ .HasMaxLength(512);
+
+ b.Property("ClientId")
+ .HasColumnName("ClientId")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ClientIpAddress")
+ .HasColumnName("ClientIpAddress")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ClientName")
+ .HasColumnName("ClientName")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Comments")
+ .HasColumnName("Comments")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CorrelationId")
+ .HasColumnName("CorrelationId")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("Exceptions")
+ .HasColumnName("Exceptions")
+ .HasColumnType("nvarchar(4000)")
+ .HasMaxLength(4000);
+
+ b.Property("ExecutionDuration")
+ .HasColumnName("ExecutionDuration")
+ .HasColumnType("int");
+
+ b.Property("ExecutionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HttpMethod")
+ .HasColumnName("HttpMethod")
+ .HasColumnType("nvarchar(16)")
+ .HasMaxLength(16);
+
+ b.Property("HttpStatusCode")
+ .HasColumnName("HttpStatusCode")
+ .HasColumnType("int");
+
+ b.Property("ImpersonatorTenantId")
+ .HasColumnName("ImpersonatorTenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ImpersonatorUserId")
+ .HasColumnName("ImpersonatorUserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TenantId")
+ .HasColumnName("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("TenantName")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Url")
+ .HasColumnName("Url")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("UserId")
+ .HasColumnName("UserId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("UserName")
+ .HasColumnName("UserName")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.HasKey("Id");
+
+ b.HasIndex("TenantId", "ExecutionTime");
+
+ b.HasIndex("TenantId", "UserId", "ExecutionTime");
+
+ b.ToTable("AbpAuditLogs");
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AuditLogId")
+ .HasColumnName("AuditLogId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ExecutionDuration")
+ .HasColumnName("ExecutionDuration")
+ .HasColumnType("int");
+
+ b.Property("ExecutionTime")
+ .HasColumnName("ExecutionTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("MethodName")
+ .HasColumnName("MethodName")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("Parameters")
+ .HasColumnName("Parameters")
+ .HasColumnType("nvarchar(2000)")
+ .HasMaxLength(2000);
+
+ b.Property("ServiceName")
+ .HasColumnName("ServiceName")
+ .HasColumnType("nvarchar(256)")
+ .HasMaxLength(256);
+
+ b.Property("TenantId")
+ .HasColumnName("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuditLogId");
+
+ b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime");
+
+ b.ToTable("AbpAuditLogActions");
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("AuditLogId")
+ .HasColumnName("AuditLogId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ChangeTime")
+ .HasColumnName("ChangeTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ChangeType")
+ .HasColumnName("ChangeType")
+ .HasColumnType("tinyint");
+
+ b.Property("EntityId")
+ .IsRequired()
+ .HasColumnName("EntityId")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("EntityTenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("EntityTypeFullName")
+ .IsRequired()
+ .HasColumnName("EntityTypeFullName")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("TenantId")
+ .HasColumnName("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuditLogId");
+
+ b.HasIndex("TenantId", "EntityTypeFullName", "EntityId");
+
+ b.ToTable("AbpEntityChanges");
+ });
+
+ modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("EntityChangeId")
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("NewValue")
+ .HasColumnName("NewValue")
+ .HasColumnType("nvarchar(512)")
+ .HasMaxLength(512);
+
+ b.Property("OriginalValue")
+ .HasColumnName("OriginalValue")
+ .HasColumnType("nvarchar(512)")
+ .HasMaxLength(512);
+
+ b.Property("PropertyName")
+ .IsRequired()
+ .HasColumnName("PropertyName")
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("PropertyTypeFullName")
+ .IsRequired()
+ .HasColumnName("PropertyTypeFullName")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("TenantId")
+ .HasColumnName("TenantId")
+ .HasColumnType("uniqueidentifier");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EntityChangeId");
+
+ b.ToTable("AbpEntityPropertyChanges");
+ });
+
+ modelBuilder.Entity("Volo.Abp.BackgroundJobs.BackgroundJobRecord", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnName("ConcurrencyStamp")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("CreationTime")
+ .HasColumnName("CreationTime")
+ .HasColumnType("datetime2");
+
+ b.Property("ExtraProperties")
+ .HasColumnName("ExtraProperties")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("IsAbandoned")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bit")
+ .HasDefaultValue(false);
+
+ b.Property("JobArgs")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)")
+ .HasMaxLength(1048576);
+
+ b.Property("JobName")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("LastTryTime")
+ .HasColumnType("datetime2");
+
+ b.Property("NextTryTime")
+ .HasColumnType("datetime2");
+
+ b.Property("Priority")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("tinyint")
+ .HasDefaultValue((byte)15);
+
+ b.Property("TryCount")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("smallint")
+ .HasDefaultValue((short)0);
+
+ b.HasKey("Id");
+
+ b.HasIndex("IsAbandoned", "NextTryTime");
+
+ b.ToTable("AbpBackgroundJobs");
+ });
+
+ modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uniqueidentifier");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.Property("ProviderKey")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("ProviderName")
+ .HasColumnType("nvarchar(64)")
+ .HasMaxLength(64);
+
+ b.Property("Value")
+ .IsRequired()
+ .HasColumnType("nvarchar(128)")
+ .HasMaxLength(128);
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name", "ProviderName", "ProviderKey");
+
+ b.ToTable("AbpFeatureValues");
+ });
+
+ modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b =>
+ {
+ b.Property