From 4eb09a79fc52aa9f29b525757e5466bdf96dd672 Mon Sep 17 00:00:00 2001
From: yxw <17074267@qq.com>
Date: Mon, 5 Jan 2026 19:09:54 +0800
Subject: [PATCH] =?UTF-8?q?fix=20=E7=9C=81=E5=B8=82=E5=9C=B0=E5=8C=BA?=
=?UTF-8?q?=E7=AE=A1=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Atomx.Admin.Client/Models/AreaSearch.cs | 2 +
.../Pages/Settings/AreaEdit.razor | 23 +-
.../Pages/Settings/AreaList.razor | 39 +-
.../Pages/Settings/StateProvinceList.razor | 1 +
Atomx.Admin/Atomx.Admin/Atomx.Admin.csproj | 2 +-
.../Atomx.Admin/Controllers/AreaController.cs | 96 +-
Atomx.Common/Entities/Area.cs | 5 +
Atomx.Common/Models/KeyValueTree.cs | 2 +-
Atomx.Data/CacheServices/AreaCacheService.cs | 10 +-
.../Migrations/20260105102643_0.2.Designer.cs | 1528 +++++++++++++++++
Atomx.Data/Migrations/20260105102643_0.2.cs | 29 +
.../Migrations/DataContextModelSnapshot.cs | 3 +
12 files changed, 1704 insertions(+), 36 deletions(-)
create mode 100644 Atomx.Data/Migrations/20260105102643_0.2.Designer.cs
create mode 100644 Atomx.Data/Migrations/20260105102643_0.2.cs
diff --git a/Atomx.Admin/Atomx.Admin.Client/Models/AreaSearch.cs b/Atomx.Admin/Atomx.Admin.Client/Models/AreaSearch.cs
index 0bde799..1f0d4a1 100644
--- a/Atomx.Admin/Atomx.Admin.Client/Models/AreaSearch.cs
+++ b/Atomx.Admin/Atomx.Admin.Client/Models/AreaSearch.cs
@@ -6,6 +6,8 @@ namespace Atomx.Admin.Client.Models
{
[IgnoreDataMember]
public long? CountryId { get; set; }
+
+ [IgnoreDataMember]
public long StateProvinceId { get; set; }
public string Name { get; set; } = string.Empty;
}
diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/AreaEdit.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/AreaEdit.razor
index e39322e..ace9708 100644
--- a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/AreaEdit.razor
+++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/AreaEdit.razor
@@ -27,7 +27,7 @@
-
+
@@ -81,9 +81,10 @@
{
model.CountryId = CountryId;
+ _ = LoadStateProvinceAndCities();
_ = LoadLanguage();
_ = LoadCountry();
- _ = LoadStateProvinceAndCities();
+
if (Id > 0)
{
LoadData();
@@ -164,14 +165,14 @@
{
area = apiResult.Data;
model = apiResult.Data.Adapt();
- // if (model.ParentId > 0)
- // {
- // cities = $"{model.StateProvinceId},{model.ParentId}";
- // }
- // else if (model.StateProvinceId > 0)
- // {
- // cities = $"{model.StateProvinceId}";
- // }
+ if (model.ParentId > 0)
+ {
+ cities = $"{model.ParentId}";
+ }
+ else if (model.StateProvinceId > 0)
+ {
+ cities = $"{model.StateProvinceId}";
+ }
}
}
else
@@ -203,7 +204,7 @@
{
saving = false;
await ModalService.InfoAsync(new ConfirmOptions() { Title = "提示", Content = "数据提交成功!" });
- Navigation.NavigateTo($"/area/list/{CountryId}");
+ Navigation.NavigateTo($"/area/list/{CountryId}/{StateProvinceId}");
}
else
{
diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/AreaList.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/AreaList.razor
index 3857ef4..a1f23f6 100644
--- a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/AreaList.razor
+++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/AreaList.razor
@@ -48,6 +48,7 @@
+
@if (context.Enabled)
{
@@ -172,22 +173,52 @@
{
if (page > 1)
{
- Navigation.NavigateTo($"/area/list/{CountryId}?page={page}");
+ if (StateProvinceId > 0)
+ {
+ Navigation.NavigateTo($"/area/list/{CountryId}/{StateProvinceId}?page={page}");
+ }
+ else
+ {
+ Navigation.NavigateTo($"/area/list/{CountryId}?page={page}");
+ }
}
else
{
- Navigation.NavigateTo($"/area/list/{CountryId}");
+ if (StateProvinceId > 0)
+ {
+ Navigation.NavigateTo($"/area/list/{CountryId}/{StateProvinceId}");
+ }
+ else
+ {
+ Navigation.NavigateTo($"/area/list/{CountryId}");
+ }
}
}
else
{
if (page > 1)
{
- Navigation.NavigateTo($"/area/list/{CountryId}?page={page}&{queryString}");
+ if (StateProvinceId > 0)
+ {
+ Navigation.NavigateTo($"/area/list/{CountryId}/{StateProvinceId}?page={page}&{queryString}");
+ }
+ else
+ {
+ Navigation.NavigateTo($"/area/list/{CountryId}?page={page}&{queryString}");
+ }
+
}
else
{
- Navigation.NavigateTo($"/area/list/{CountryId}?{queryString}");
+ if (StateProvinceId > 0)
+ {
+ Navigation.NavigateTo($"/area/list/{CountryId}/{StateProvinceId}?{queryString}");
+ }
+ else
+ {
+ Navigation.NavigateTo($"/area/list/{CountryId}?{queryString}");
+ }
+
}
}
}
diff --git a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/StateProvinceList.razor b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/StateProvinceList.razor
index 24fde39..124ba95 100644
--- a/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/StateProvinceList.razor
+++ b/Atomx.Admin/Atomx.Admin.Client/Pages/Settings/StateProvinceList.razor
@@ -47,6 +47,7 @@
+
@if (context.Enabled)
{
diff --git a/Atomx.Admin/Atomx.Admin/Atomx.Admin.csproj b/Atomx.Admin/Atomx.Admin/Atomx.Admin.csproj
index cd3393c..2582382 100644
--- a/Atomx.Admin/Atomx.Admin/Atomx.Admin.csproj
+++ b/Atomx.Admin/Atomx.Admin/Atomx.Admin.csproj
@@ -32,7 +32,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/Atomx.Admin/Atomx.Admin/Controllers/AreaController.cs b/Atomx.Admin/Atomx.Admin/Controllers/AreaController.cs
index 7a4ab3a..0a7edd1 100644
--- a/Atomx.Admin/Atomx.Admin/Controllers/AreaController.cs
+++ b/Atomx.Admin/Atomx.Admin/Controllers/AreaController.cs
@@ -188,7 +188,7 @@ namespace Atomx.Admin.Controllers
if (search.StateProvinceId > 0)
{
query = from p in query
- where p.ParentId == search.StateProvinceId
+ where p.StateProvinceId == search.StateProvinceId
select p;
}
list.Count = query.Count();
@@ -299,32 +299,79 @@ namespace Atomx.Admin.Controllers
{
return new JsonResult(new ApiResult().IsFail("数据不存在", null));
}
+ bool stateProvinceChanged = data.StateProvinceId != model.StateProvinceId;
+ bool parentChanged = data.ParentId != model.ParentId;
+ long oldStateProvinceId = data.StateProvinceId;
+ long oldParentId = data.ParentId;
data = _mapper.Map(model, data);
- var parent = _dbContext.Areas.Where(p => p.Id == model.ParentId).SingleOrDefault();
- if (parent == null)
+ if (stateProvinceChanged || parentChanged)
{
- data.Depth = 0;
- data.Path = model.Id.ToString();
- }
- else
- {
- if (parent.StateProvinceId == 0)
+ var parent = _dbContext.Areas.Where(p => p.Id == model.ParentId).SingleOrDefault();
+ if (parent == null)
{
- data.StateProvinceId = parent.Id;
+ data.Depth = 0;
+ data.Path = model.Id.ToString();
}
else
{
- data.StateProvinceId = parent.StateProvinceId;
- }
+ if (parent.StateProvinceId == 0)
+ {
+ data.StateProvinceId = parent.Id;
+ }
+ else
+ {
+ data.StateProvinceId = parent.StateProvinceId;
+ }
- data.Depth = parent.Depth + 1;
- data.Path = $"{parent.Path},{data.Id}";
+ data.Depth = parent.Depth + 1;
+ data.Path = $"{parent.Path},{data.Id}";
+ }
}
_dbContext.SaveChanges();
+ if (stateProvinceChanged || parentChanged)
+ {
+ //更新数量
+ if (parentChanged)
+ {
+ if (oldParentId > 0)
+ {
+ var oldParent = _dbContext.Areas.SingleOrDefault(p => p.Id == oldParentId);
+ if (oldParent != null)
+ {
+ oldParent.Count = _dbContext.Areas.Count(p => p.ParentId == oldParent.Id);
+ _dbContext.SaveChanges();
+ }
+ }
+ var Parent = _dbContext.Areas.SingleOrDefault(p => p.Id == data.ParentId);
+ if (Parent != null)
+ {
+ Parent.Count = _dbContext.Areas.Count(p => p.ParentId == Parent.Id);
+ _dbContext.SaveChanges();
+ }
+ }
+ if (stateProvinceChanged)
+ {
+ if (oldStateProvinceId > 0)
+ {
+ var oldState = _dbContext.Areas.SingleOrDefault(p => p.Id == oldStateProvinceId);
+ if (oldState != null)
+ {
+ oldState.Count = _dbContext.Areas.Count(p => p.StateProvinceId == oldState.Id);
+ _dbContext.SaveChanges();
+ }
+ }
+ var state = _dbContext.Areas.SingleOrDefault(p => p.Id == data.StateProvinceId);
+ if (state != null)
+ {
+ state.Count = _dbContext.Areas.Count(p => p.StateProvinceId == state.Id);
+ _dbContext.SaveChanges();
+ }
+ }
+ }
}
else
{
@@ -346,6 +393,7 @@ namespace Atomx.Admin.Controllers
else
{
data.StateProvinceId = parent.StateProvinceId;
+
}
data.Depth = parent.Depth + 1;
data.Path = $"{parent.Path},{data.Id}";
@@ -353,6 +401,26 @@ namespace Atomx.Admin.Controllers
_dbContext.Areas.Add(data);
_dbContext.SaveChanges();
+
+ if (data.ParentId > 0)
+ {
+
+ //更新省份的数量
+ var state = _dbContext.Areas.SingleOrDefault(p => p.Id == data.StateProvinceId);
+ if (state != null)
+ {
+ state.Count = _dbContext.Areas.Count(p => p.StateProvinceId == state.Id);
+ _dbContext.SaveChanges();
+ }
+
+ //更新城市的数量
+ var city = _dbContext.Areas.SingleOrDefault(p => p.Id == data.ParentId);
+ if (city != null)
+ {
+ city.Count = _dbContext.Areas.Count(p => p.ParentId == city.Id);
+ _dbContext.SaveChanges();
+ }
+ }
}
_backgroundService.ResetStateProvinceAndAreaTree(model.CountryId);
diff --git a/Atomx.Common/Entities/Area.cs b/Atomx.Common/Entities/Area.cs
index f61b3d6..4d6c8dc 100644
--- a/Atomx.Common/Entities/Area.cs
+++ b/Atomx.Common/Entities/Area.cs
@@ -50,6 +50,11 @@ namespace Atomx.Common.Entities
[Column(TypeName = "varchar(32)")]
public string Abbreviation { get; set; } = string.Empty;
+ ///
+ /// 下级地区数量
+ ///
+ public int Count { get; set; }
+
///
/// 地区深度
///
diff --git a/Atomx.Common/Models/KeyValueTree.cs b/Atomx.Common/Models/KeyValueTree.cs
index 12212a7..829b041 100644
--- a/Atomx.Common/Models/KeyValueTree.cs
+++ b/Atomx.Common/Models/KeyValueTree.cs
@@ -4,6 +4,6 @@
{
public string Label { get; set; } = string.Empty;
public string Value { get; set; } = string.Empty;
- public List Children { get; set; } = new List();
+ public IList Children { get; set; } = new List();
}
}
diff --git a/Atomx.Data/CacheServices/AreaCacheService.cs b/Atomx.Data/CacheServices/AreaCacheService.cs
index 2990a35..94d8743 100644
--- a/Atomx.Data/CacheServices/AreaCacheService.cs
+++ b/Atomx.Data/CacheServices/AreaCacheService.cs
@@ -91,13 +91,13 @@ namespace Atomx.Data.CacheServices
Value = state.Id.ToString()
};
- var citysInState = cities.Where(p => p.StateProvinceId == state.Id).ToList();
+ var citysInState = cities.Where(p => p.ParentId == state.Id).ToList();
foreach (var city in citysInState)
{
var cityItem = new KeyValueTree
{
- Label = state.Name,
- Value = state.Id.ToString()
+ Label = city.Name,
+ Value = city.Id.ToString()
};
cityItem.Children = BuildAreaTree(city.Id, cities, new List());
@@ -250,7 +250,7 @@ namespace Atomx.Data.CacheServices
private List BuildAreaTree(long parentId, List areas, List result)
{
var data = areas.Where(p => p.ParentId == parentId).ToList();
- foreach (var area in areas)
+ foreach (var area in data)
{
var item = new KeyValueTree
{
@@ -261,7 +261,7 @@ namespace Atomx.Data.CacheServices
if (childs.Count > 0)
{
var childrenTrees = BuildAreaTree(area.Id, areas, result);
- item.Children.AddRange(childrenTrees);
+ item.Children = childrenTrees;
}
result.Add(item);
}
diff --git a/Atomx.Data/Migrations/20260105102643_0.2.Designer.cs b/Atomx.Data/Migrations/20260105102643_0.2.Designer.cs
new file mode 100644
index 0000000..0083716
--- /dev/null
+++ b/Atomx.Data/Migrations/20260105102643_0.2.Designer.cs
@@ -0,0 +1,1528 @@
+//
+using System;
+using Atomx.Data;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace Atomx.Data.Migrations
+{
+ [DbContext(typeof(DataContext))]
+ [Migration("20260105102643_0.2")]
+ partial class _02
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "10.0.1")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("Atomx.Common.Entities.Address", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("AddressDetails")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("City")
+ .IsRequired()
+ .HasColumnType("varchar(100)");
+
+ b.Property("CityId")
+ .HasColumnType("bigint");
+
+ b.Property("Company")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("Count")
+ .HasColumnType("integer");
+
+ b.Property("Country")
+ .IsRequired()
+ .HasColumnType("varchar(50)");
+
+ b.Property("CountryId")
+ .HasColumnType("bigint");
+
+ b.Property("CreateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Email")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("FullAddress")
+ .IsRequired()
+ .HasColumnType("varchar(1024)");
+
+ b.Property("IsDelete")
+ .HasColumnType("boolean");
+
+ b.Property("IsVirtual")
+ .HasColumnType("boolean");
+
+ b.Property("Latitude")
+ .HasColumnType("decimal(10,6)");
+
+ b.Property("Longitude")
+ .HasColumnType("decimal(10,6)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("varchar(128)");
+
+ b.Property("Phone")
+ .IsRequired()
+ .HasColumnType("varchar(20)");
+
+ b.Property("PostalCode")
+ .IsRequired()
+ .HasColumnType("varchar(15)");
+
+ b.Property("Province")
+ .IsRequired()
+ .HasColumnType("varchar(100)");
+
+ b.Property("ProvinceId")
+ .HasColumnType("bigint");
+
+ b.Property("Region")
+ .IsRequired()
+ .HasColumnType("varchar(100)");
+
+ b.Property("RegionId")
+ .HasColumnType("bigint");
+
+ b.Property("UpdateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("UserId")
+ .HasColumnType("bigint");
+
+ b.HasKey("Id");
+
+ b.ToTable("Addresses");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.Admin", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("Avatar")
+ .IsRequired()
+ .HasColumnType("varchar(64)");
+
+ b.Property("CreateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Email")
+ .IsRequired()
+ .HasColumnType("varchar(64)");
+
+ b.Property("LastIp")
+ .IsRequired()
+ .HasColumnType("varchar(50)");
+
+ b.Property("LastLogin")
+ .HasColumnType("timestamptz");
+
+ b.Property("LockoutEndTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("LoginCount")
+ .HasColumnType("integer");
+
+ b.Property("Mobile")
+ .IsRequired()
+ .HasColumnType("varchar(64)");
+
+ b.Property("Password")
+ .IsRequired()
+ .HasColumnType("varchar(64)");
+
+ b.Property("RoleId")
+ .HasColumnType("integer");
+
+ b.Property("Status")
+ .HasColumnType("integer");
+
+ b.Property("TimeOffset")
+ .IsRequired()
+ .HasColumnType("varchar(4)");
+
+ b.Property("UpdateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Username")
+ .IsRequired()
+ .HasColumnType("varchar(64)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Admins");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.AppVersion", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("AppName")
+ .IsRequired()
+ .HasColumnType("varchar(64)");
+
+ b.Property("Content")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("CreateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Platform")
+ .HasColumnType("integer");
+
+ b.Property("SiteId")
+ .HasColumnType("integer");
+
+ b.Property("Status")
+ .HasColumnType("integer");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("varchar(64)");
+
+ b.Property("UpdateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Version")
+ .IsRequired()
+ .HasColumnType("varchar(64)");
+
+ b.Property("VersionDate")
+ .IsRequired()
+ .HasColumnType("varchar(64)");
+
+ b.Property("VersionState")
+ .HasColumnType("integer");
+
+ b.Property("VersionX")
+ .IsRequired()
+ .HasColumnType("varchar(64)");
+
+ b.Property("VersionY")
+ .IsRequired()
+ .HasColumnType("varchar(64)");
+
+ b.Property("VersionZ")
+ .IsRequired()
+ .HasColumnType("varchar(64)");
+
+ b.HasKey("Id");
+
+ b.ToTable("AppVersions");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.Area", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("Abbreviation")
+ .IsRequired()
+ .HasColumnType("varchar(32)");
+
+ b.Property("AllowShipping")
+ .HasColumnType("boolean");
+
+ b.Property("Count")
+ .HasColumnType("integer");
+
+ b.Property("CountryId")
+ .HasColumnType("bigint");
+
+ b.Property("Depth")
+ .HasColumnType("integer");
+
+ b.Property("DisplayOrder")
+ .HasColumnType("integer");
+
+ b.Property("Enabled")
+ .HasColumnType("boolean");
+
+ b.Property("Initial")
+ .IsRequired()
+ .HasColumnType("varchar(1)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("ParentId")
+ .HasColumnType("bigint");
+
+ b.Property("Path")
+ .IsRequired()
+ .HasColumnType("varchar(100)");
+
+ b.Property("StateProvinceId")
+ .HasColumnType("bigint");
+
+ b.HasKey("Id");
+
+ b.ToTable("Areas");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.Category", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("Banner")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("Count")
+ .HasColumnType("integer");
+
+ b.Property("CreateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Depth")
+ .HasColumnType("integer");
+
+ b.Property("DisplayOrder")
+ .HasColumnType("integer");
+
+ b.Property("Enabled")
+ .HasColumnType("boolean");
+
+ b.Property("FilterAttributes")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("Image")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("IsNode")
+ .HasColumnType("boolean");
+
+ b.Property("MetaDescription")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("MetaKeywords")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("varchar(25)");
+
+ b.Property("ParentId")
+ .HasColumnType("bigint");
+
+ b.Property("Path")
+ .IsRequired()
+ .HasColumnType("varchar(100)");
+
+ b.Property("SiteId")
+ .HasColumnType("integer");
+
+ b.Property("Slug")
+ .IsRequired()
+ .HasColumnType("varchar(50)");
+
+ b.Property("Type")
+ .HasColumnType("integer");
+
+ b.Property("UpdateTime")
+ .HasColumnType("timestamptz");
+
+ b.HasKey("Id");
+
+ b.ToTable("Categories");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.Channel", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Config")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("CreateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasColumnType("varchar(512)");
+
+ b.Property("DisplayOrder")
+ .HasColumnType("integer");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("varchar(20)");
+
+ b.Property("Network")
+ .HasColumnType("integer");
+
+ b.Property("SiteId")
+ .HasColumnType("integer");
+
+ b.Property("Status")
+ .HasColumnType("integer");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("varchar(20)");
+
+ b.Property("Type")
+ .HasColumnType("integer");
+
+ b.Property("UpdateTime")
+ .HasColumnType("timestamptz");
+
+ b.HasKey("Id");
+
+ b.ToTable("Channels");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.Country", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("AllowShipping")
+ .HasColumnType("boolean");
+
+ b.Property("DisplayOrder")
+ .HasColumnType("integer");
+
+ b.Property("Enabled")
+ .HasColumnType("boolean");
+
+ b.Property("Initial")
+ .IsRequired()
+ .HasColumnType("varchar(1)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("NumericISOCode")
+ .HasColumnType("integer");
+
+ b.Property("ThreeLetterISOCode")
+ .IsRequired()
+ .HasColumnType("varchar(3)");
+
+ b.Property("TwoLetterISOCode")
+ .IsRequired()
+ .HasColumnType("varchar(2)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Countries");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.Currency", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CreateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("CurrencyCode")
+ .IsRequired()
+ .HasColumnType("varchar(10)");
+
+ b.Property("CustomFormatting")
+ .IsRequired()
+ .HasColumnType("varchar(20)");
+
+ b.Property("DisplayLocale")
+ .IsRequired()
+ .HasColumnType("varchar(15)");
+
+ b.Property("DisplayOrder")
+ .HasColumnType("integer");
+
+ b.Property("EnableDisplay")
+ .HasColumnType("boolean");
+
+ b.Property("EnablePay")
+ .HasColumnType("boolean");
+
+ b.Property("Enabled")
+ .HasColumnType("boolean");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("varchar(50)");
+
+ b.Property("Rate")
+ .HasColumnType("decimal(16, 4)");
+
+ b.Property("SiteId")
+ .HasColumnType("integer");
+
+ b.Property("Symbolic")
+ .IsRequired()
+ .HasColumnType("varchar(8)");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("varchar(50)");
+
+ b.Property("UpdateTime")
+ .HasColumnType("timestamptz");
+
+ b.HasKey("Id");
+
+ b.ToTable("Currencies");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.CurrencyChannelRelation", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("ChannelId")
+ .HasColumnType("integer");
+
+ b.Property("CreateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("CurrencyId")
+ .HasColumnType("integer");
+
+ b.Property("EndTime")
+ .HasColumnType("integer");
+
+ b.Property("Extended")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Rate")
+ .HasColumnType("numeric");
+
+ b.Property("StartTime")
+ .HasColumnType("integer");
+
+ b.Property("Status")
+ .HasColumnType("integer");
+
+ b.Property("TimeZone")
+ .HasColumnType("integer");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("UpdateTime")
+ .HasColumnType("timestamptz");
+
+ b.HasKey("Id");
+
+ b.ToTable("CurrencyChannelRelations");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.Language", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("CreateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Culture")
+ .IsRequired()
+ .HasColumnType("varchar(25)");
+
+ b.Property("DisplayOrder")
+ .HasColumnType("integer");
+
+ b.Property("Enabled")
+ .HasColumnType("boolean");
+
+ b.Property("FlagImage")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("varchar(50)");
+
+ b.Property("ResourceVersion")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("varchar(50)");
+
+ b.Property("UpdateTime")
+ .HasColumnType("timestamptz");
+
+ b.HasKey("Id");
+
+ b.ToTable("Languages");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.LocaleResource", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("LanguageId")
+ .HasColumnType("integer");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("UpdateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Value")
+ .IsRequired()
+ .HasColumnType("varchar(1000)");
+
+ b.HasKey("Id");
+
+ b.ToTable("LocaleResources");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.LocalizedProperty", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("EntityId")
+ .HasColumnType("bigint");
+
+ b.Property("Key")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("LanguageId")
+ .HasColumnType("integer");
+
+ b.Property("Type")
+ .HasColumnType("integer");
+
+ b.Property("Value")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("LocalizedProperties");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.Menu", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("Code")
+ .IsRequired()
+ .HasColumnType("varchar(50)");
+
+ b.Property("CreateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Depth")
+ .HasColumnType("integer");
+
+ b.Property("DisplayOrder")
+ .HasColumnType("integer");
+
+ b.Property("Enabled")
+ .HasColumnType("boolean");
+
+ b.Property("Icon")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("IsLink")
+ .HasColumnType("boolean");
+
+ b.Property("Key")
+ .IsRequired()
+ .HasColumnType("varchar(50)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("varchar(50)");
+
+ b.Property("ParentId")
+ .HasColumnType("bigint");
+
+ b.Property("Path")
+ .IsRequired()
+ .HasColumnType("varchar(100)");
+
+ b.Property("Type")
+ .HasColumnType("integer");
+
+ b.Property("UpdateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Url")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Menus");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.MessageTemplate", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("Attachments")
+ .IsRequired()
+ .HasColumnType("varchar(1024)");
+
+ b.Property("Body")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("CreateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Enabled")
+ .HasColumnType("boolean");
+
+ b.Property("Key")
+ .IsRequired()
+ .HasColumnType("varchar(64)");
+
+ b.Property("LanguageId")
+ .HasColumnType("integer");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("SiteId")
+ .HasColumnType("integer");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("Type")
+ .HasColumnType("integer");
+
+ b.Property("UpdateTime")
+ .HasColumnType("timestamptz");
+
+ b.HasKey("Id");
+
+ b.ToTable("MessageTemplates");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.Permission", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("Category")
+ .IsRequired()
+ .HasColumnType("varchar(128)");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("varchar(128)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Permissions");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.Product", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("CategoryId")
+ .HasColumnType("bigint");
+
+ b.Property("CategoryPath")
+ .HasColumnType("varchar(200)");
+
+ b.Property("CorporationId")
+ .HasColumnType("bigint");
+
+ b.Property("CorporationStaffId")
+ .HasColumnType("bigint");
+
+ b.Property("CreateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Deleted")
+ .HasColumnType("boolean");
+
+ b.Property("DeletedTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Description")
+ .HasColumnType("varchar(256)");
+
+ b.Property("DisplayOrder")
+ .HasColumnType("integer");
+
+ b.Property("Extended")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Feature")
+ .HasColumnType("varchar(256)");
+
+ b.Property("Image")
+ .HasColumnType("varchar(256)");
+
+ b.Property("InventoryMethod")
+ .HasColumnType("integer");
+
+ b.Property("ManufacturerId")
+ .HasColumnType("bigint");
+
+ b.Property("MarketPrice")
+ .HasColumnType("decimal(18,4)");
+
+ b.Property("MaxWeight")
+ .HasColumnType("decimal(6,2)");
+
+ b.Property("MinWeight")
+ .HasColumnType("decimal(6,2)");
+
+ b.Property("Photos")
+ .HasColumnType("text");
+
+ b.Property("PictureCount")
+ .HasColumnType("integer");
+
+ b.Property("Price")
+ .HasColumnType("decimal(18,4)");
+
+ b.Property("ProductTypeId")
+ .HasColumnType("bigint");
+
+ b.Property("ReviewStatus")
+ .HasColumnType("integer");
+
+ b.Property("SIN")
+ .HasColumnType("varchar(20)");
+
+ b.Property("SalesQuantity")
+ .HasColumnType("integer");
+
+ b.Property("SkuPrices")
+ .HasColumnType("text");
+
+ b.Property("SpecificationJson")
+ .HasColumnType("text");
+
+ b.Property("Status")
+ .HasColumnType("integer");
+
+ b.Property("StockQuantity")
+ .HasColumnType("integer");
+
+ b.Property("StoreId")
+ .HasColumnType("bigint");
+
+ b.Property("Title")
+ .IsRequired()
+ .HasColumnType("varchar(256)");
+
+ b.Property("UpdateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("Weight")
+ .HasColumnType("decimal(6,2)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Products");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.ProductAttribute", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("CategoryId")
+ .HasColumnType("bigint");
+
+ b.Property("ControlType")
+ .HasColumnType("integer");
+
+ b.Property("Count")
+ .HasColumnType("integer");
+
+ b.Property("CreateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("DisplayOrder")
+ .HasColumnType("integer");
+
+ b.Property("IsRequired")
+ .HasColumnType("boolean");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("varchar(50)");
+
+ b.Property("ParentId")
+ .HasColumnType("bigint");
+
+ b.Property("Status")
+ .HasColumnType("integer");
+
+ b.Property("UpdateTime")
+ .HasColumnType("timestamptz");
+
+ b.Property("WeightIsRequired")
+ .HasColumnType("boolean");
+
+ b.Property("WeightUnit")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("ProductAttributes");
+ });
+
+ modelBuilder.Entity("Atomx.Common.Entities.ProductAttributeCombination", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("bigint");
+
+ b.Property("AttributesJson")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("CorporationId")
+ .HasColumnType("bigint");
+
+ b.Property("Enabled")
+ .HasColumnType("boolean");
+
+ b.Property("ManufacturerId")
+ .HasColumnType("bigint");
+
+ b.Property("Mark")
+ .HasColumnType("integer");
+
+ b.Property("MarketPrice")
+ .HasColumnType("decimal(18,4)");
+
+ b.Property