Browse Source

版本冲突

bjmzak
DESKTOP-G961P6V\Zhh 2 years ago
parent
commit
10dd17d1d5
  1. 3
      src/Shentun.Peis.Application.Contracts/ColumnReferences/ColumnReferenceDto.cs
  2. 5
      src/Shentun.Peis.Application.Contracts/ColumnReferences/CreateColumnReferenceDto.cs
  3. 10
      src/Shentun.Peis.Application.Contracts/ColumnReferences/UpdateColumnReferenceDto.cs
  4. 214
      src/Shentun.Peis.Application/ColumnReferences/ColumnReferenceAppService.cs
  5. 1
      src/Shentun.Peis.Application/Shentun.Peis.Application.csproj
  6. 26
      src/Shentun.Peis.Domain/ColumnReferences/ColumnReferenceManager.cs
  7. 13836
      src/Shentun.Peis.EntityFrameworkCore/Migrations/20240424103142_init20240424002.Designer.cs
  8. 100
      src/Shentun.Peis.EntityFrameworkCore/Migrations/20240424103142_init20240424002.cs
  9. 104
      src/Shentun.Peis.EntityFrameworkCore/Migrations/PeisDbContextModelSnapshot.cs

3
src/Shentun.Peis.Application.Contracts/ColumnReferences/ColumnReferenceDto.cs

@ -15,12 +15,9 @@ namespace Shentun.Peis.ColumnReferences
/// <summary>
/// 配置参数
/// </summary>
[Column("parm_value")]
[StringLength(1000)]
public string ParmValue { get; set; }
[Column("display_order")]
public int DisplayOrder { get; set; }
}
}

5
src/Shentun.Peis.Application.Contracts/ColumnReferences/CreateColumnReferenceDto.cs

@ -12,15 +12,12 @@ namespace Shentun.Peis.ColumnReferences
/// 名称
/// </summary>
public string DisplayName { get; set; }
/// <summary>
/// 配置参数
/// </summary>
[Column("parm_value")]
[StringLength(1000)]
public string ParmValue { get; set; }
[Column("display_order")]
public int DisplayOrder { get; set; }
}
}

10
src/Shentun.Peis.Application.Contracts/ColumnReferences/UpdateColumnReferenceDto.cs

@ -8,6 +8,11 @@ namespace Shentun.Peis.ColumnReferences
{
public class UpdateColumnReferenceDto
{
/// <summary>
/// 主键ID
/// </summary>
public Guid Id { get; set; }
/// <summary>
/// 名称
/// </summary>
@ -15,12 +20,7 @@ namespace Shentun.Peis.ColumnReferences
/// <summary>
/// 配置参数
/// </summary>
[Column("parm_value")]
[StringLength(1000)]
public string ParmValue { get; set; }
[Column("display_order")]
public int DisplayOrder { get; set; }
}
}

214
src/Shentun.Peis.Application/ColumnReferences/ColumnReferenceAppService.cs

@ -22,30 +22,28 @@ using Volo.Abp.Users;
using Volo.Abp.ObjectMapping;
using Microsoft.Extensions.Configuration;
using System.IO;
using Shentun.Peis.ColumnReferencePlugIns;
using Shentun.Peis.HelperDto;
namespace Shentun.Peis.ColumnReferences
{
/// <summary>
/// 字段对照主表
/// </summary>
[ApiExplorerSettings(GroupName = "Work")]
[Authorize]
public class ColumnReferenceAppService : CrudAppService<
ColumnReference, //The Book entity
ColumnReferenceDto, //Used to show books
Guid, //Primary key of the book entity
PagedAndSortedResultRequestDto, //Used for paging/sorting
CreateColumnReferenceDto,
UpdateColumnReferenceDto>
public class ColumnReferenceAppService : ApplicationService
{
private readonly IRepository<ColumnReference, Guid> _repository;
private readonly ColumnReferenceManager _manager;
private readonly CacheService _cacheService;
private readonly IRepository<IdentityUser, Guid> _userRepository;
public ColumnReferenceAppService(IRepository<ColumnReference, Guid> repository,
ColumnReferenceManager manager,
public ColumnReferenceAppService(
IRepository<ColumnReference, Guid> repository,
ColumnReferenceManager manager,
CacheService cacheService,
IRepository<IdentityUser, Guid> userRepository
):base(repository)
)
{
_repository = repository;
_manager = manager;
@ -59,29 +57,25 @@ namespace Shentun.Peis.ColumnReferences
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("api/app/ColumnReference/get")]
public override async Task<ColumnReferenceDto> GetAsync(Guid id)
[HttpPost("api/app/ColumnReference/Get")]
public async Task<ColumnReferenceDto> GetAsync(Guid id)
{
var entityDto = await base.GetAsync(id);
var entity = await _repository.GetAsync(id);
var entityDto = ObjectMapper.Map<ColumnReference, ColumnReferenceDto>(entity);
entityDto.CreatorName = _cacheService.GetUserNameAsync(entityDto.CreatorId).Result;
entityDto.LastModifierName = _cacheService.GetUserNameAsync(entityDto.LastModifierId).Result;
return entityDto;
}
[RemoteService(false)]
public override Task<PagedResultDto<ColumnReferenceDto>> GetListAsync(PagedAndSortedResultRequestDto input)
{
return base.GetListAsync(input);
}
/// <summary>
/// 查询列表
/// </summary>
/// <returns></returns>
[HttpGet("api/app/ColumnReference/GetColumnReferenceList")]
public async Task<List<ColumnReferenceDto>> GetColumnReferenceListAsync()
[HttpPost("api/app/ColumnReference/GetList")]
public async Task<List<ColumnReferenceDto>> GetListAsync()
{
var userQueryable = await _userRepository.GetQueryableAsync();
@ -109,7 +103,7 @@ namespace Shentun.Peis.ColumnReferences
LastModificationTime = s.a.LastModificationTime,
CreatorName = s.CreatorName,
LastModifierName = s.LastModifierName
}).ToList();
}).OrderBy(o => o.DisplayOrder).ToList();
return entlist;
}
@ -120,11 +114,11 @@ namespace Shentun.Peis.ColumnReferences
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/ColumnReference/Create")]
public override async Task<ColumnReferenceDto> CreateAsync(CreateColumnReferenceDto input)
public async Task<ColumnReferenceDto> CreateAsync(CreateColumnReferenceDto input)
{
var createEntity = ObjectMapper.Map<CreateColumnReferenceDto, ColumnReference>(input);
var entity = await _manager.CreateAsync(createEntity);
entity = await Repository.InsertAsync(entity);
entity = await _repository.InsertAsync(entity);
var dto = ObjectMapper.Map<ColumnReference, ColumnReferenceDto>(entity);
return dto;
}
@ -132,16 +126,15 @@ namespace Shentun.Peis.ColumnReferences
/// <summary>
/// 修改
/// </summary>
/// <param name="id"></param>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/ColumnReference/Update")]
public override async Task<ColumnReferenceDto> UpdateAsync(Guid id, UpdateColumnReferenceDto input)
public async Task<ColumnReferenceDto> UpdateAsync(UpdateColumnReferenceDto input)
{
var entity = await Repository.GetAsync(id);
var entity = await _repository.GetAsync(input.Id);
var sourceEntity = ObjectMapper.Map<UpdateColumnReferenceDto, ColumnReference>(input);
await _manager.UpdateAsync(sourceEntity, entity);
entity = await Repository.UpdateAsync(entity);
entity = await _repository.UpdateAsync(entity);
return ObjectMapper.Map<ColumnReference, ColumnReferenceDto>(entity);
}
@ -151,90 +144,115 @@ namespace Shentun.Peis.ColumnReferences
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("api/app/ColumnReference/Delete")]
public override async Task DeleteAsync(Guid id)
public async Task DeleteAsync(Guid id)
{
var entity = await Repository.GetAsync(id);
var entity = await _repository.GetAsync(id);
await _manager.CheckAndDeleteAsync(entity);
}
public async Task<List<string>> GetColumns(ColumnReferenceIdInputDto input)
{
var entity = await _repository.GetAsync(input.Id);
var parmValue = entity.ParmValue;
var configurationBuilder = new ConfigurationBuilder()
.AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue)));
var config = configurationBuilder.Build();
var assemblyName = config.GetSection("Interface").GetSection("AssemblyName").Value;
var className = config.GetSection("Interface").GetSection("ClassName").Value;
object objectValue= Invoke(assemblyName, className, "GetColumns");
List<string> list = new List<string>();
if (objectValue is IEnumerable enumerableObject)
{
list = enumerableObject.Cast<string>().ToList();
}
return list;
}
public async Task<string> GetFilterColumnName(ColumnReferenceIdInputDto input)
{
return null;
}
public async Task<List<string>> GetInterfaceColumns(ColumnReferenceIdInputDto input)
/// <summary>
/// 修改排序 置顶,置底
/// </summary>
/// <param name="id">需要修改的ID</param>
/// <param name="SortType">修改方式:1 置顶 2 置底</param>
/// <returns></returns>
[HttpPut("api/app/ColumnReference/UpdateManySort")]
public async Task UpdateManySortAsync(Guid id, int SortType)
{
var entity = await _repository.GetAsync(input.Id);
var parmValue = entity.ParmValue;
var configurationBuilder = new ConfigurationBuilder()
.AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue)));
var config = configurationBuilder.Build();
var assemblyName = config.GetSection("Interface").GetSection("AssemblyName").Value;
var className = config.GetSection("Interface").GetSection("ClassName").Value;
object objectValue = Invoke(assemblyName, className, "GetInterfaceColumns");
List<string> list = new List<string>();
if (objectValue is IEnumerable enumerableObject)
{
list = enumerableObject.Cast<string>().ToList();
}
return list;
await _manager.UpdateManySortAsync(id, SortType);
}
public async Task<List<ColumnReferenceCodeValue>> GetCodeValues(ColumnReferenceIdInputDto input)
/// <summary>
/// 修改排序 拖拽
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPut("api/app/ColumnReference/UpdateSortMany")]
public async Task UpdateSortManyAsync(UpdateSortManyDto input)
{
return null;
await _manager.UpdateSortManyAsync(input);
}
public async Task<List<ColumnReferenceFilterCodeValue>> GetFilterCodeValues(ColumnReferenceIdInputDto input)
{
return null;
}
public async Task<List<ColumnReferenceCodeValue>> GetInterfaceCodeValues(ColumnReferenceIdInputDto input)
{
return null;
}
//public async Task<List<string>> GetColumns(ColumnReferenceIdInputDto input)
//{
// var entity = await _repository.GetAsync(input.Id);
// var parmValue = entity.ParmValue;
// var configurationBuilder = new ConfigurationBuilder()
// .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue)));
// var config = configurationBuilder.Build();
// var assemblyName = config.GetSection("Interface").GetSection("AssemblyName").Value;
// var className = config.GetSection("Interface").GetSection("ClassName").Value;
// object objectValue = Invoke(assemblyName, className, "GetColumns");
// List<string> list = new List<string>();
public async Task<List<ColumnReferenceCodeValue>> GetColumnReferenceInterfaceCodeValues(ColumnReferenceIdInputDto input)
{
return null;
}
// if (objectValue is IEnumerable enumerableObject)
// {
// list = enumerableObject.Cast<string>().ToList();
// }
// return list;
//}
//public async Task<string> GetFilterColumnName(ColumnReferenceIdInputDto input)
//{
// return null;
//}
public async Task CreateColumnReferenceValue(CreateColumnReferenceValue input)
{
//public async Task<List<string>> GetInterfaceColumns(ColumnReferenceIdInputDto input)
//{
// var entity = await _repository.GetAsync(input.Id);
// var parmValue = entity.ParmValue;
// var configurationBuilder = new ConfigurationBuilder()
// .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue)));
// var config = configurationBuilder.Build();
// var assemblyName = config.GetSection("Interface").GetSection("AssemblyName").Value;
// var className = config.GetSection("Interface").GetSection("ClassName").Value;
// object objectValue = Invoke(assemblyName, className, "GetInterfaceColumns");
// List<string> list = new List<string>();
}
// if (objectValue is IEnumerable enumerableObject)
// {
// list = enumerableObject.Cast<string>().ToList();
// }
// return list;
//}
private object Invoke(string assemblyName, string className, string methodName, object[] args = null)
{
Assembly assembly = Assembly.Load(assemblyName);
Type type = assembly.GetType(className);
// 创建类的实例
object instance = Activator.CreateInstance(type);
// 获取方法信息
MethodInfo method = type.GetMethod(methodName);
// 调用方法,如果方法需要参数,可以传入对应的参数数组,例如: new object[] { arg1, arg2 }
object returnValue = method.Invoke(instance, args);
return returnValue;
}
//public async Task<List<ColumnReferenceCodeValue>> GetCodeValues(ColumnReferenceIdInputDto input)
//{
// return null;
//}
//public async Task<List<ColumnReferenceFilterCodeValue>> GetFilterCodeValues(ColumnReferenceIdInputDto input)
//{
// return null;
//}
//public async Task<List<ColumnReferenceCodeValue>> GetInterfaceCodeValues(ColumnReferenceIdInputDto input)
//{
// return null;
//}
//public async Task<List<ColumnReferenceCodeValue>> GetColumnReferenceInterfaceCodeValues(ColumnReferenceIdInputDto input)
//{
// return null;
//}
//public async Task CreateColumnReferenceValue(CreateColumnReferenceValue input)
//{
//}
//private object Invoke(string assemblyName, string className, string methodName, object[] args = null)
//{
// Assembly assembly = Assembly.Load(assemblyName);
// Type type = assembly.GetType(className);
// // 创建类的实例
// object instance = Activator.CreateInstance(type);
// // 获取方法信息
// MethodInfo method = type.GetMethod(methodName);
// // 调用方法,如果方法需要参数,可以传入对应的参数数组,例如: new object[] { arg1, arg2 }
// object returnValue = method.Invoke(instance, args);
// return returnValue;
//}
}
}

1
src/Shentun.Peis.Application/Shentun.Peis.Application.csproj

@ -19,7 +19,6 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Shentun.ColumnReferencePlugIns\Shentun.Peis.ColumnReferencePlugIns.csproj" />
<ProjectReference Include="..\Shentun.Peis.Domain\Shentun.Peis.Domain.csproj" />
<ProjectReference Include="..\Shentun.Peis.Application.Contracts\Shentun.Peis.Application.Contracts.csproj" />
<ProjectReference Include="..\Shentun.Peis.EntityFrameworkCore\Shentun.Peis.EntityFrameworkCore.csproj" />

26
src/Shentun.Peis.Domain/ColumnReferences/ColumnReferenceManager.cs

@ -7,6 +7,7 @@ using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
using Volo.Abp;
using Volo.Abp.Domain.Services;
using Shentun.Peis.HelperDto;
namespace Shentun.Peis.ColumnReferences
{
@ -60,10 +61,33 @@ namespace Shentun.Peis.ColumnReferences
public async Task CheckAndDeleteAsync(ColumnReference entity)
{
await _repository.DeleteAsync(entity);
}
/// <summary>
/// 修改排序 置顶,置底
/// </summary>
/// <param name="id">需要修改的ID</param>
/// <param name="SortType">修改方式:1 置顶 2 置底</param>
/// <returns></returns>
public async Task UpdateManySortAsync(Guid id, int SortType)
{
await EntityHelper.UpdateManySortAsync(_repository, id, SortType);
}
await _repository.DeleteAsync(entity);
/// <summary>
/// 修改排序 拖拽
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="repository"></param>
/// <param name="input"></param>
/// <returns></returns>
public async Task UpdateSortManyAsync(UpdateSortManyDto input)
{
await EntityHelper.UpdateSortManyAsync(_repository, input);
}
}
}

13836
src/Shentun.Peis.EntityFrameworkCore/Migrations/20240424103142_init20240424002.Designer.cs
File diff suppressed because it is too large
View File

100
src/Shentun.Peis.EntityFrameworkCore/Migrations/20240424103142_init20240424002.cs

@ -0,0 +1,100 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Shentun.Peis.Migrations
{
public partial class init20240424002 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropForeignKey(
name: "fk_columnreference_columnreferenceplugins",
table: "column_reference");
migrationBuilder.DropTable(
name: "column_reference_plug_ins");
migrationBuilder.DropIndex(
name: "IX_column_reference_column_reference_plug_ins_id",
table: "column_reference");
migrationBuilder.DropColumn(
name: "column_reference_plug_ins_id",
table: "column_reference");
migrationBuilder.AlterColumn<DateOnly>(
name: "BRITHDAY",
table: "L_JYTMXX_TJ",
type: "date",
nullable: false,
oldClrType: typeof(DateTime),
oldType: "timestamp without time zone");
migrationBuilder.AddColumn<string>(
name: "parm_value",
table: "column_reference",
type: "character varying(1000)",
maxLength: 1000,
nullable: true);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "parm_value",
table: "column_reference");
migrationBuilder.AlterColumn<DateTime>(
name: "BRITHDAY",
table: "L_JYTMXX_TJ",
type: "timestamp without time zone",
nullable: false,
oldClrType: typeof(DateOnly),
oldType: "date");
migrationBuilder.AddColumn<Guid>(
name: "column_reference_plug_ins_id",
table: "column_reference",
type: "uuid",
nullable: false,
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"),
comment: "插件ID");
migrationBuilder.CreateTable(
name: "column_reference_plug_ins",
columns: table => new
{
id = table.Column<Guid>(type: "uuid", fixedLength: true, nullable: false, comment: "编号"),
assembly_name = table.Column<string>(type: "character varying(100)", maxLength: 100, nullable: false, comment: "Assembly名称"),
class_name = table.Column<string>(type: "character varying(100)", maxLength: 100, nullable: false, comment: "Class名称"),
concurrency_stamp = table.Column<string>(type: "character varying(40)", maxLength: 40, nullable: true),
creation_time = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
creator_id = table.Column<Guid>(type: "uuid", nullable: false),
display_name = table.Column<string>(type: "character varying(30)", maxLength: 30, nullable: false, comment: "名称"),
display_order = table.Column<int>(type: "integer", nullable: false, comment: "显示顺序"),
last_modification_time = table.Column<DateTime>(type: "timestamp without time zone", nullable: false),
last_modifier_id = table.Column<Guid>(type: "uuid", nullable: false),
parm_value = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: true, comment: "配置参数")
},
constraints: table =>
{
table.PrimaryKey("PK_column_reference_plug_ins", x => x.id);
},
comment: "字段对照插件表");
migrationBuilder.CreateIndex(
name: "IX_column_reference_column_reference_plug_ins_id",
table: "column_reference",
column: "column_reference_plug_ins_id");
migrationBuilder.AddForeignKey(
name: "fk_columnreference_columnreferenceplugins",
table: "column_reference",
column: "column_reference_plug_ins_id",
principalTable: "column_reference_plug_ins",
principalColumn: "id");
}
}
}

104
src/Shentun.Peis.EntityFrameworkCore/Migrations/PeisDbContextModelSnapshot.cs

@ -422,8 +422,8 @@ namespace Shentun.Peis.Migrations
.IsFixedLength()
.HasComment("编号");
b.Property<DateTime>("BRITHDAY")
.HasColumnType("timestamp without time zone")
b.Property<DateOnly>("BRITHDAY")
.HasColumnType("date")
.HasColumnName("BRITHDAY");
b.Property<string>("BRXZ")
@ -1844,11 +1844,6 @@ namespace Shentun.Peis.Migrations
.IsFixedLength()
.HasComment("编号");
b.Property<Guid>("ColumnReferencePlugInsId")
.HasColumnType("uuid")
.HasColumnName("column_reference_plug_ins_id")
.HasComment("插件ID");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
@ -1886,9 +1881,12 @@ namespace Shentun.Peis.Migrations
.HasColumnType("uuid")
.HasColumnName("last_modifier_id");
b.HasKey("Id");
b.Property<string>("ParmValue")
.HasMaxLength(1000)
.HasColumnType("character varying(1000)")
.HasColumnName("parm_value");
b.HasIndex("ColumnReferencePlugInsId");
b.HasKey("Id");
b.ToTable("column_reference");
@ -2006,78 +2004,6 @@ namespace Shentun.Peis.Migrations
b.HasComment("字段对照第三方系统编码表");
});
modelBuilder.Entity("Shentun.Peis.Models.ColumnReferencePlugIns", b =>
{
b.Property<Guid>("Id")
.HasColumnType("uuid")
.HasColumnName("id")
.IsFixedLength()
.HasComment("编号");
b.Property<string>("AssemblyName")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("assembly_name")
.HasComment("Assembly名称");
b.Property<string>("ClassName")
.IsRequired()
.HasMaxLength(100)
.HasColumnType("character varying(100)")
.HasColumnName("class_name")
.HasComment("Class名称");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("character varying(40)")
.HasColumnName("concurrency_stamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("timestamp without time zone")
.HasColumnName("creation_time");
b.Property<Guid?>("CreatorId")
.IsRequired()
.HasColumnType("uuid")
.HasColumnName("creator_id");
b.Property<string>("DisplayName")
.IsRequired()
.HasMaxLength(30)
.HasColumnType("character varying(30)")
.HasColumnName("display_name")
.HasComment("名称");
b.Property<int>("DisplayOrder")
.HasColumnType("integer")
.HasColumnName("display_order")
.HasComment("显示顺序");
b.Property<DateTime?>("LastModificationTime")
.IsRequired()
.HasColumnType("timestamp without time zone")
.HasColumnName("last_modification_time");
b.Property<Guid?>("LastModifierId")
.IsRequired()
.HasColumnType("uuid")
.HasColumnName("last_modifier_id");
b.Property<string>("ParmValue")
.HasMaxLength(500)
.HasColumnType("character varying(500)")
.HasColumnName("parm_value")
.HasComment("配置参数");
b.HasKey("Id");
b.ToTable("column_reference_plug_ins");
b.HasComment("字段对照插件表");
});
modelBuilder.Entity("Shentun.Peis.Models.CommonChar", b =>
{
b.Property<Guid>("Id")
@ -12395,17 +12321,6 @@ namespace Shentun.Peis.Migrations
b.Navigation("ChargeAsbitem");
});
modelBuilder.Entity("Shentun.Peis.Models.ColumnReference", b =>
{
b.HasOne("Shentun.Peis.Models.ColumnReferencePlugIns", "ColumnReferencePlugIns")
.WithMany("ColumnReferences")
.HasForeignKey("ColumnReferencePlugInsId")
.IsRequired()
.HasConstraintName("fk_columnreference_columnreferenceplugins");
b.Navigation("ColumnReferencePlugIns");
});
modelBuilder.Entity("Shentun.Peis.Models.ColumnReferenceCode", b =>
{
b.HasOne("Shentun.Peis.Models.ColumnReference", "ColumnReference")
@ -13571,11 +13486,6 @@ namespace Shentun.Peis.Migrations
b.Navigation("ColumnReferenceInterfaces");
});
modelBuilder.Entity("Shentun.Peis.Models.ColumnReferencePlugIns", b =>
{
b.Navigation("ColumnReferences");
});
modelBuilder.Entity("Shentun.Peis.Models.CommonCharType", b =>
{
b.Navigation("CommonChars");

Loading…
Cancel
Save