mirror of https://github.com/EasyAbp/EShop.git
78 changed files with 4700 additions and 638 deletions
@ -1,17 +0,0 @@ |
|||
using System; |
|||
using Volo.Abp.Application.Dtos; |
|||
using Volo.Abp.MultiTenancy; |
|||
|
|||
namespace EasyAbp.EShop.Products.ProductTypes.Dtos |
|||
{ |
|||
public class ProductTypeDto : FullAuditedEntityDto<Guid> |
|||
{ |
|||
public string UniqueName { get; set; } |
|||
|
|||
public string DisplayName { get; set; } |
|||
|
|||
public string Description { get; set; } |
|||
|
|||
public MultiTenancySides MultiTenancySide { get; set; } |
|||
} |
|||
} |
|||
@ -1,16 +0,0 @@ |
|||
using System; |
|||
using EasyAbp.EShop.Products.ProductTypes.Dtos; |
|||
using Volo.Abp.Application.Dtos; |
|||
using Volo.Abp.Application.Services; |
|||
|
|||
namespace EasyAbp.EShop.Products.ProductTypes |
|||
{ |
|||
public interface IProductTypeAppService : |
|||
IReadOnlyAppService< |
|||
ProductTypeDto, |
|||
Guid, |
|||
PagedAndSortedResultRequestDto> |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,14 @@ |
|||
using System; |
|||
|
|||
namespace EasyAbp.EShop.Products.Products.Dtos |
|||
{ |
|||
[Serializable] |
|||
public class ProductGroupDto |
|||
{ |
|||
public string Name { get; set; } |
|||
|
|||
public string DisplayName { get; set; } |
|||
|
|||
public string Description { get; set; } |
|||
} |
|||
} |
|||
@ -1,22 +0,0 @@ |
|||
using System; |
|||
using EasyAbp.EShop.Products.Permissions; |
|||
using EasyAbp.EShop.Products.ProductTypes.Dtos; |
|||
using Volo.Abp.Application.Dtos; |
|||
using Volo.Abp.Application.Services; |
|||
|
|||
namespace EasyAbp.EShop.Products.ProductTypes |
|||
{ |
|||
public class ProductTypeAppService : ReadOnlyAppService<ProductType, ProductTypeDto, Guid, PagedAndSortedResultRequestDto>, |
|||
IProductTypeAppService |
|||
{ |
|||
protected override string GetPolicyName { get; set; } = ProductsPermissions.ProductTypes.Default; |
|||
protected override string GetListPolicyName { get; set; } = ProductsPermissions.ProductTypes.Default; |
|||
|
|||
private readonly IProductTypeRepository _repository; |
|||
|
|||
public ProductTypeAppService(IProductTypeRepository repository) : base(repository) |
|||
{ |
|||
_repository = repository; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,17 @@ |
|||
using System; |
|||
using EasyAbp.EShop.Products.Options.ProductGroups; |
|||
|
|||
namespace EasyAbp.EShop.Products.Options |
|||
{ |
|||
public class EShopProductsOptions |
|||
{ |
|||
public ProductGroupConfigurations Groups { get; } |
|||
|
|||
public Type DefaultFileDownloadProviderType { get; set; } |
|||
|
|||
public EShopProductsOptions() |
|||
{ |
|||
Groups = new ProductGroupConfigurations(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,8 @@ |
|||
namespace EasyAbp.EShop.Products.Options.ProductGroups |
|||
{ |
|||
[ProductGroupName(ProductsConsts.DefaultProductGroupName)] |
|||
public class DefaultProductGroup |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
namespace EasyAbp.EShop.Products.Options.ProductGroups |
|||
{ |
|||
public interface IProductGroup |
|||
{ |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
namespace EasyAbp.EShop.Products.Options.ProductGroups |
|||
{ |
|||
public interface IProductGroupConfigurationProvider |
|||
{ |
|||
ProductGroupConfiguration Get(string productGroupName); |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
namespace EasyAbp.EShop.Products.Options.ProductGroups |
|||
{ |
|||
public class ProductGroupConfiguration |
|||
{ |
|||
public string DisplayName { get; set; } |
|||
|
|||
public string Description { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,20 @@ |
|||
using Microsoft.Extensions.Options; |
|||
using Volo.Abp.DependencyInjection; |
|||
|
|||
namespace EasyAbp.EShop.Products.Options.ProductGroups |
|||
{ |
|||
public class ProductGroupConfigurationProvider : IProductGroupConfigurationProvider, ITransientDependency |
|||
{ |
|||
private readonly EShopProductsOptions _options; |
|||
|
|||
public ProductGroupConfigurationProvider(IOptions<EShopProductsOptions> options) |
|||
{ |
|||
_options = options.Value; |
|||
} |
|||
|
|||
public ProductGroupConfiguration Get(string productGroupName) |
|||
{ |
|||
return _options.Groups.GetConfiguration(productGroupName); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,73 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp; |
|||
|
|||
namespace EasyAbp.EShop.Products.Options.ProductGroups |
|||
{ |
|||
public class ProductGroupConfigurations |
|||
{ |
|||
private readonly Dictionary<string, ProductGroupConfiguration> _groups; |
|||
|
|||
public ProductGroupConfigurations() |
|||
{ |
|||
_groups = new Dictionary<string, ProductGroupConfiguration>(); |
|||
} |
|||
|
|||
public ProductGroupConfigurations Configure<TGroup>( |
|||
Action<ProductGroupConfiguration> configureAction) |
|||
{ |
|||
return Configure( |
|||
ProductGroupNameAttribute.GetGroupName<TGroup>(), |
|||
configureAction |
|||
); |
|||
} |
|||
|
|||
public ProductGroupConfigurations Configure( |
|||
[NotNull] string name, |
|||
[NotNull] Action<ProductGroupConfiguration> configureAction) |
|||
{ |
|||
Check.NotNullOrWhiteSpace(name, nameof(name)); |
|||
Check.NotNull(configureAction, nameof(configureAction)); |
|||
|
|||
configureAction( |
|||
_groups.GetOrAdd( |
|||
name, |
|||
() => new ProductGroupConfiguration() |
|||
) |
|||
); |
|||
|
|||
return this; |
|||
} |
|||
|
|||
public ProductGroupConfigurations ConfigureAll(Action<string, ProductGroupConfiguration> configureAction) |
|||
{ |
|||
foreach (var group in _groups) |
|||
{ |
|||
configureAction(group.Key, group.Value); |
|||
} |
|||
|
|||
return this; |
|||
} |
|||
|
|||
[NotNull] |
|||
public ProductGroupConfiguration GetConfiguration<TGroup>() |
|||
{ |
|||
return GetConfiguration(ProductGroupNameAttribute.GetGroupName<TGroup>()); |
|||
} |
|||
|
|||
[NotNull] |
|||
public ProductGroupConfiguration GetConfiguration([NotNull] string name) |
|||
{ |
|||
Check.NotNullOrWhiteSpace(name, nameof(name)); |
|||
|
|||
return _groups.GetOrDefault(name); |
|||
} |
|||
|
|||
[NotNull] |
|||
public Dictionary<string, ProductGroupConfiguration> GetConfigurationsDictionary() |
|||
{ |
|||
return _groups; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,42 @@ |
|||
using System; |
|||
using System.Reflection; |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp; |
|||
|
|||
namespace EasyAbp.EShop.Products.Options.ProductGroups |
|||
{ |
|||
public class ProductGroupNameAttribute : Attribute |
|||
{ |
|||
[NotNull] |
|||
public string Name { get; } |
|||
|
|||
public ProductGroupNameAttribute([NotNull] string name) |
|||
{ |
|||
Check.NotNullOrWhiteSpace(name, nameof(name)); |
|||
|
|||
Name = name; |
|||
} |
|||
|
|||
public virtual string GetName(Type type) |
|||
{ |
|||
return Name; |
|||
} |
|||
|
|||
public static string GetGroupName<T>() |
|||
{ |
|||
return GetGroupName(typeof(T)); |
|||
} |
|||
|
|||
public static string GetGroupName(Type type) |
|||
{ |
|||
var nameAttribute = type.GetCustomAttribute<ProductGroupNameAttribute>(); |
|||
|
|||
if (nameAttribute == null) |
|||
{ |
|||
return type.FullName; |
|||
} |
|||
|
|||
return nameAttribute.GetName(type); |
|||
} |
|||
} |
|||
} |
|||
@ -1,10 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Data; |
|||
|
|||
namespace EasyAbp.EShop.Products.ProductTypes |
|||
{ |
|||
public interface IProductTypeDataSeeder |
|||
{ |
|||
Task SeedAsync(DataSeedContext context); |
|||
} |
|||
} |
|||
@ -1,9 +0,0 @@ |
|||
using System; |
|||
using Volo.Abp.Domain.Repositories; |
|||
|
|||
namespace EasyAbp.EShop.Products.ProductTypes |
|||
{ |
|||
public interface IProductTypeRepository : IRepository<ProductType, Guid> |
|||
{ |
|||
} |
|||
} |
|||
@ -1,38 +0,0 @@ |
|||
using System; |
|||
using JetBrains.Annotations; |
|||
using Volo.Abp.Domain.Entities.Auditing; |
|||
using Volo.Abp.MultiTenancy; |
|||
|
|||
namespace EasyAbp.EShop.Products.ProductTypes |
|||
{ |
|||
public class ProductType : FullAuditedAggregateRoot<Guid> |
|||
{ |
|||
public virtual string UniqueName { get; protected set; } |
|||
|
|||
[NotNull] |
|||
public virtual string DisplayName { get; protected set; } |
|||
|
|||
[CanBeNull] |
|||
public virtual string Description { get; protected set; } |
|||
|
|||
public virtual MultiTenancySides MultiTenancySide { get; protected set; } |
|||
|
|||
protected ProductType() |
|||
{ |
|||
} |
|||
|
|||
public ProductType( |
|||
Guid id, |
|||
string uniqueName, |
|||
string displayName, |
|||
string description, |
|||
MultiTenancySides multiTenancySide |
|||
) :base(id) |
|||
{ |
|||
UniqueName = uniqueName; |
|||
DisplayName = displayName; |
|||
Description = description; |
|||
MultiTenancySide = multiTenancySide; |
|||
} |
|||
} |
|||
} |
|||
@ -1,31 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Guids; |
|||
using Volo.Abp.MultiTenancy; |
|||
|
|||
namespace EasyAbp.EShop.Products.ProductTypes |
|||
{ |
|||
public class ProductTypeDataSeeder : IProductTypeDataSeeder, ITransientDependency |
|||
{ |
|||
private readonly IGuidGenerator _guidGenerator; |
|||
private readonly IProductTypeRepository _productTypeRepository; |
|||
|
|||
public ProductTypeDataSeeder( |
|||
IGuidGenerator guidGenerator, |
|||
IProductTypeRepository productTypeRepository) |
|||
{ |
|||
_guidGenerator = guidGenerator; |
|||
_productTypeRepository = productTypeRepository; |
|||
} |
|||
|
|||
public async Task SeedAsync(DataSeedContext context) |
|||
{ |
|||
if (await _productTypeRepository.GetCountAsync() == 0) |
|||
{ |
|||
await _productTypeRepository.InsertAsync(new ProductType(_guidGenerator.Create(), ProductsConsts.DefaultProductType, "Default", |
|||
null, MultiTenancySides.Both), true); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,14 @@ |
|||
using System; |
|||
using Volo.Abp; |
|||
|
|||
namespace EasyAbp.EShop.Products.Products |
|||
{ |
|||
public class NonexistentProductGroupException : BusinessException |
|||
{ |
|||
public NonexistentProductGroupException(string productGroupName) : base( |
|||
"NonexistentProductGroup", |
|||
$"The specified product group ({productGroupName}) is nonexistent.") |
|||
{ |
|||
} |
|||
} |
|||
} |
|||
@ -1,24 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
using EasyAbp.EShop.Products.ProductTypes; |
|||
using Volo.Abp.Data; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.Uow; |
|||
|
|||
namespace EasyAbp.EShop.Products |
|||
{ |
|||
public class ProductsDataSeedContributor : IDataSeedContributor, ITransientDependency |
|||
{ |
|||
private readonly IProductTypeDataSeeder _productTypeDataSeeder; |
|||
|
|||
public ProductsDataSeedContributor(IProductTypeDataSeeder productTypeDataSeeder) |
|||
{ |
|||
_productTypeDataSeeder = productTypeDataSeeder; |
|||
} |
|||
|
|||
[UnitOfWork(true)] |
|||
public async Task SeedAsync(DataSeedContext context) |
|||
{ |
|||
await _productTypeDataSeeder.SeedAsync(context); |
|||
} |
|||
} |
|||
} |
|||
@ -1,14 +0,0 @@ |
|||
using System; |
|||
using EasyAbp.EShop.Products.EntityFrameworkCore; |
|||
using Volo.Abp.Domain.Repositories.EntityFrameworkCore; |
|||
using Volo.Abp.EntityFrameworkCore; |
|||
|
|||
namespace EasyAbp.EShop.Products.ProductTypes |
|||
{ |
|||
public class ProductTypeRepository : EfCoreRepository<IProductsDbContext, ProductType, Guid>, IProductTypeRepository |
|||
{ |
|||
public ProductTypeRepository(IDbContextProvider<IProductsDbContext> dbContextProvider) : base(dbContextProvider) |
|||
{ |
|||
} |
|||
} |
|||
} |
|||
@ -1,34 +0,0 @@ |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using EasyAbp.EShop.Products.ProductTypes.Dtos; |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Volo.Abp; |
|||
using Volo.Abp.Application.Dtos; |
|||
|
|||
namespace EasyAbp.EShop.Products.ProductTypes |
|||
{ |
|||
[RemoteService(Name = "EShopProducts")] |
|||
[Route("/api/eShop/products/productType")] |
|||
public class ProductTypeController : ProductsController, IProductTypeAppService |
|||
{ |
|||
private readonly IProductTypeAppService _service; |
|||
|
|||
public ProductTypeController(IProductTypeAppService service) |
|||
{ |
|||
_service = service; |
|||
} |
|||
|
|||
[HttpGet] |
|||
[Route("{id}")] |
|||
public Task<ProductTypeDto> GetAsync(Guid id) |
|||
{ |
|||
return _service.GetAsync(id); |
|||
} |
|||
|
|||
[HttpGet] |
|||
public Task<PagedResultDto<ProductTypeDto>> GetListAsync(PagedAndSortedResultRequestDto input) |
|||
{ |
|||
return _service.GetListAsync(input); |
|||
} |
|||
} |
|||
} |
|||
@ -1,45 +0,0 @@ |
|||
@page |
|||
@using EasyAbp.EShop.Products.Localization |
|||
@using EasyAbp.EShop.Products.Web.Menus |
|||
@using EasyAbp.EShop.Products.Web.Pages.EShop.Products.ProductTypes.ProductType |
|||
@using Microsoft.AspNetCore.Mvc.Localization |
|||
@using Volo.Abp.AspNetCore.Mvc.UI.Layout |
|||
@model IndexModel |
|||
@inject IPageLayout PageLayout |
|||
@inject IHtmlLocalizer<ProductsResource> L |
|||
@{ |
|||
PageLayout.Content.Title = L["ProductType"].Value; |
|||
PageLayout.Content.BreadCrumb.Add(L["Menu:ProductType"].Value); |
|||
PageLayout.Content.MenuItemName = ProductsMenus.ProductType; |
|||
} |
|||
|
|||
@section scripts |
|||
{ |
|||
<abp-script src="/Pages/EShop/Products/ProductTypes/ProductType/index.js" /> |
|||
} |
|||
@section styles |
|||
{ |
|||
<abp-style src="/Pages/EShop/Products/ProductTypes/ProductType/index.css"/> |
|||
} |
|||
|
|||
<abp-card> |
|||
<abp-card-header> |
|||
<abp-row> |
|||
<abp-column size-md="_6"> |
|||
<abp-card-title>@L["ProductType"]</abp-card-title> |
|||
</abp-column> |
|||
</abp-row> |
|||
</abp-card-header> |
|||
<abp-card-body> |
|||
<abp-table striped-rows="true" id="ProductTypeTable" class="nowrap"> |
|||
<thead> |
|||
<tr> |
|||
<th>@L["ProductTypeUniqueName"]</th> |
|||
<th>@L["ProductTypeDisplayName"]</th> |
|||
<th>@L["ProductTypeDescription"]</th> |
|||
<th>@L["ProductTypeMultiTenancySide"]</th> |
|||
</tr> |
|||
</thead> |
|||
</abp-table> |
|||
</abp-card-body> |
|||
</abp-card> |
|||
@ -1,12 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace EasyAbp.EShop.Products.Web.Pages.EShop.Products.ProductTypes.ProductType |
|||
{ |
|||
public class IndexModel : ProductsPageModel |
|||
{ |
|||
public async Task OnGetAsync() |
|||
{ |
|||
await Task.CompletedTask; |
|||
} |
|||
} |
|||
} |
|||
@ -1,23 +0,0 @@ |
|||
$(function () { |
|||
|
|||
var l = abp.localization.getResource('EasyAbpEShopProducts'); |
|||
|
|||
var service = easyAbp.eShop.products.productTypes.productType; |
|||
|
|||
var dataTable = $('#ProductTypeTable').DataTable(abp.libs.datatables.normalizeConfiguration({ |
|||
processing: true, |
|||
serverSide: true, |
|||
paging: true, |
|||
searching: false, |
|||
autoWidth: false, |
|||
scrollCollapse: true, |
|||
order: [[1, "asc"]], |
|||
ajax: abp.libs.datatables.createAjax(service.getList), |
|||
columnDefs: [ |
|||
{ data: "uniqueName" }, |
|||
{ data: "displayName" }, |
|||
{ data: "description" }, |
|||
{ data: "multiTenancySide" }, |
|||
] |
|||
})); |
|||
}); |
|||
@ -1,26 +0,0 @@ |
|||
using Shouldly; |
|||
using System.Threading.Tasks; |
|||
using Xunit; |
|||
|
|||
namespace EasyAbp.EShop.Products.ProductTypes |
|||
{ |
|||
public class ProductTypeAppServiceTests : ProductsApplicationTestBase |
|||
{ |
|||
private readonly IProductTypeAppService _productTypeAppService; |
|||
|
|||
public ProductTypeAppServiceTests() |
|||
{ |
|||
_productTypeAppService = GetRequiredService<IProductTypeAppService>(); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Test1() |
|||
{ |
|||
// Arrange
|
|||
|
|||
// Act
|
|||
|
|||
// Assert
|
|||
} |
|||
} |
|||
} |
|||
@ -1,23 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
using Shouldly; |
|||
using Xunit; |
|||
|
|||
namespace EasyAbp.EShop.Products.ProductTypes |
|||
{ |
|||
public class ProductTypeDomainTests : ProductsDomainTestBase |
|||
{ |
|||
public ProductTypeDomainTests() |
|||
{ |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Test1() |
|||
{ |
|||
// Arrange
|
|||
|
|||
// Assert
|
|||
|
|||
// Assert
|
|||
} |
|||
} |
|||
} |
|||
@ -1,31 +0,0 @@ |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using EasyAbp.EShop.Products.ProductTypes; |
|||
using Volo.Abp.Domain.Repositories; |
|||
using Xunit; |
|||
|
|||
namespace EasyAbp.EShop.Products.EntityFrameworkCore.ProductTypes |
|||
{ |
|||
public class ProductTypeRepositoryTests : ProductsEntityFrameworkCoreTestBase |
|||
{ |
|||
private readonly IRepository<ProductType, Guid> _productTypeRepository; |
|||
|
|||
public ProductTypeRepositoryTests() |
|||
{ |
|||
_productTypeRepository = GetRequiredService<IRepository<ProductType, Guid>>(); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Test1() |
|||
{ |
|||
await WithUnitOfWorkAsync(async () => |
|||
{ |
|||
// Arrange
|
|||
|
|||
// Act
|
|||
|
|||
//Assert
|
|||
}); |
|||
} |
|||
} |
|||
} |
|||
File diff suppressed because it is too large
@ -0,0 +1,89 @@ |
|||
using System; |
|||
using Microsoft.EntityFrameworkCore.Migrations; |
|||
|
|||
namespace EShopSample.Migrations |
|||
{ |
|||
public partial class RemovedProductTypeEntity : Migration |
|||
{ |
|||
protected override void Up(MigrationBuilder migrationBuilder) |
|||
{ |
|||
migrationBuilder.DropTable( |
|||
name: "EasyAbpEShopProductsProductTypes"); |
|||
|
|||
migrationBuilder.DropColumn( |
|||
name: "ProductTypeId", |
|||
table: "EasyAbpEShopProductsProducts"); |
|||
|
|||
migrationBuilder.DropColumn( |
|||
name: "ProductTypeUniqueName", |
|||
table: "EasyAbpEShopOrdersOrderLines"); |
|||
|
|||
migrationBuilder.AddColumn<string>( |
|||
name: "ProductGroupName", |
|||
table: "EasyAbpEShopProductsProducts", |
|||
nullable: true); |
|||
|
|||
migrationBuilder.AddColumn<string>( |
|||
name: "ProductGroupDisplayName", |
|||
table: "EasyAbpEShopOrdersOrderLines", |
|||
nullable: true); |
|||
|
|||
migrationBuilder.AddColumn<string>( |
|||
name: "ProductGroupName", |
|||
table: "EasyAbpEShopOrdersOrderLines", |
|||
nullable: true); |
|||
} |
|||
|
|||
protected override void Down(MigrationBuilder migrationBuilder) |
|||
{ |
|||
migrationBuilder.DropColumn( |
|||
name: "ProductGroupName", |
|||
table: "EasyAbpEShopProductsProducts"); |
|||
|
|||
migrationBuilder.DropColumn( |
|||
name: "ProductGroupDisplayName", |
|||
table: "EasyAbpEShopOrdersOrderLines"); |
|||
|
|||
migrationBuilder.DropColumn( |
|||
name: "ProductGroupName", |
|||
table: "EasyAbpEShopOrdersOrderLines"); |
|||
|
|||
migrationBuilder.AddColumn<Guid>( |
|||
name: "ProductTypeId", |
|||
table: "EasyAbpEShopProductsProducts", |
|||
type: "uniqueidentifier", |
|||
nullable: false, |
|||
defaultValue: new Guid("00000000-0000-0000-0000-000000000000")); |
|||
|
|||
migrationBuilder.AddColumn<string>( |
|||
name: "ProductTypeUniqueName", |
|||
table: "EasyAbpEShopOrdersOrderLines", |
|||
type: "nvarchar(max)", |
|||
nullable: true); |
|||
|
|||
migrationBuilder.CreateTable( |
|||
name: "EasyAbpEShopProductsProductTypes", |
|||
columns: table => new |
|||
{ |
|||
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
|||
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true), |
|||
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false), |
|||
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
|||
DeleterId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
|||
DeletionTime = table.Column<DateTime>(type: "datetime2", nullable: true), |
|||
Description = table.Column<string>(type: "nvarchar(max)", nullable: true), |
|||
DisplayName = table.Column<string>(type: "nvarchar(max)", nullable: true), |
|||
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true), |
|||
IsDeleted = table.Column<bool>(type: "bit", nullable: false, defaultValue: false), |
|||
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true), |
|||
LastModifierId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
|||
MultiTenancySide = table.Column<int>(type: "int", nullable: false), |
|||
UniqueName = table.Column<string>(type: "nvarchar(max)", nullable: true) |
|||
}, |
|||
constraints: table => |
|||
{ |
|||
table.PrimaryKey("PK_EasyAbpEShopProductsProductTypes", x => x.Id); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue