Add project files.
This commit is contained in:
7
FaKrosnoEfDataModel/Dtos/DtoBase.cs
Normal file
7
FaKrosnoEfDataModel/Dtos/DtoBase.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
namespace FaKrosnoEfDataModel.Dtos
|
||||
{
|
||||
public class DtoBase
|
||||
{
|
||||
public int ID { get; set; }
|
||||
}
|
||||
}
|
||||
14
FaKrosnoEfDataModel/Dtos/PurchaserDto.cs
Normal file
14
FaKrosnoEfDataModel/Dtos/PurchaserDto.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Dtos
|
||||
{
|
||||
public class PurchaserDto : DtoBase
|
||||
{
|
||||
public string PurchaserCode { get; set; }
|
||||
public string PurchaserDesc { get; set; }
|
||||
}
|
||||
}
|
||||
17
FaKrosnoEfDataModel/Dtos/RecipientDto.cs
Normal file
17
FaKrosnoEfDataModel/Dtos/RecipientDto.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Dtos
|
||||
{
|
||||
public class RecipientDto : DtoBase
|
||||
{
|
||||
public int PurchaserID { get; set; }
|
||||
public string RecipientCode { get; set; }
|
||||
public string RecipientDesc { get; set; }
|
||||
|
||||
public PurchaserDto Purchaser { get; set; }
|
||||
}
|
||||
}
|
||||
25
FaKrosnoEfDataModel/Dtos/ScheduleOrderDetailDetailDto.cs
Normal file
25
FaKrosnoEfDataModel/Dtos/ScheduleOrderDetailDetailDto.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Dtos
|
||||
{
|
||||
public class ScheduleOrderDetailDetailDto : DtoBase
|
||||
{
|
||||
public int ScheduleOrderDetailID { get; set; }
|
||||
public int Qty { get; set; }
|
||||
public DateTime DateFrom { get; set; }
|
||||
public DateTime DateTo { get; set; }
|
||||
public string SccType { get; set; }
|
||||
public string? SccDesc { get; set; }
|
||||
public string? QtyType { get; set; }
|
||||
public string? QtyDesc { get; set; }
|
||||
public string Status { get; set; }
|
||||
public DateTime? ShipDate { get; set; }
|
||||
public DateTime LastUpdateDate { get; set; }
|
||||
|
||||
public IList<ScheduleOrderDetailDetailMiscDto> ScheduleOrderDetailDetailMiscs { get; set; }
|
||||
}
|
||||
}
|
||||
17
FaKrosnoEfDataModel/Dtos/ScheduleOrderDetailDetailMiscDto.cs
Normal file
17
FaKrosnoEfDataModel/Dtos/ScheduleOrderDetailDetailMiscDto.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Dtos
|
||||
{
|
||||
public class ScheduleOrderDetailDetailMiscDto : DtoBase
|
||||
{
|
||||
public int ScheduleOrderDetailDetailID { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Value { get; set; }
|
||||
public string? Label { get; set; }
|
||||
public bool Display { get; set; }
|
||||
}
|
||||
}
|
||||
19
FaKrosnoEfDataModel/Dtos/ScheduleOrderDetailDto.cs
Normal file
19
FaKrosnoEfDataModel/Dtos/ScheduleOrderDetailDto.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Dtos
|
||||
{
|
||||
public class ScheduleOrderDetailDto : DtoBase
|
||||
{
|
||||
public int ScheduleOrderID { get; set; }
|
||||
public string Sc_productCode { get; set; }
|
||||
public string Sh_productCode { get; set; }
|
||||
public int? Price { get; set; }
|
||||
|
||||
public IList<ScheduleOrderDetailDetailDto> ScheduleOrderDetailDetails { get; set; }
|
||||
public IList<ScheduleOrderDetailMiscDto> ScheduleOrderDetailMiscs { get; set; }
|
||||
}
|
||||
}
|
||||
17
FaKrosnoEfDataModel/Dtos/ScheduleOrderDetailMiscDto.cs
Normal file
17
FaKrosnoEfDataModel/Dtos/ScheduleOrderDetailMiscDto.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Dtos
|
||||
{
|
||||
public class ScheduleOrderDetailMiscDto : DtoBase
|
||||
{
|
||||
public int ScheduleOrderDetailID { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Value { get; set; }
|
||||
public string? Label { get; set; }
|
||||
public bool Display { get; set; }
|
||||
}
|
||||
}
|
||||
23
FaKrosnoEfDataModel/Dtos/ScheduleOrderDto.cs
Normal file
23
FaKrosnoEfDataModel/Dtos/ScheduleOrderDto.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Dtos
|
||||
{
|
||||
public class ScheduleOrderDto : DtoBase
|
||||
{
|
||||
public string PONum { get; set; }
|
||||
public int OrderID { get; set; }
|
||||
public int RecipientID { get; set; }
|
||||
public DateTime LastUpdateDate { get; set; }
|
||||
public int DocNumber { get; set; }
|
||||
public string? DocType { get; set; }
|
||||
|
||||
public RecipientDto Recipient { get; set; }
|
||||
|
||||
public IList<ScheduleOrderDetailDto> ScheduleOrderDetails { get; set; }
|
||||
public IList<ScheduleOrderMiscDto> ScheduleOrderMiscs { get; set; }
|
||||
}
|
||||
}
|
||||
17
FaKrosnoEfDataModel/Dtos/ScheduleOrderMiscDto.cs
Normal file
17
FaKrosnoEfDataModel/Dtos/ScheduleOrderMiscDto.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Dtos
|
||||
{
|
||||
public class ScheduleOrderMiscDto : DtoBase
|
||||
{
|
||||
public int ScheduleOrderID { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Value { get; set; }
|
||||
public string? Label { get; set; }
|
||||
public bool Display { get; set; }
|
||||
}
|
||||
}
|
||||
13
FaKrosnoEfDataModel/Entities/EntityBase.cs
Normal file
13
FaKrosnoEfDataModel/Entities/EntityBase.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Entities
|
||||
{
|
||||
public class EntityBase
|
||||
{
|
||||
public int ID { get; set; }
|
||||
}
|
||||
}
|
||||
15
FaKrosnoEfDataModel/Entities/Purchaser.cs
Normal file
15
FaKrosnoEfDataModel/Entities/Purchaser.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Entities
|
||||
{
|
||||
public class Purchaser : EntityBase
|
||||
{
|
||||
public string PurchaserCode { get; set; }
|
||||
public string PurchaserDesc { get; set; }
|
||||
public ICollection<Recipient> Recipients { get; set; }
|
||||
}
|
||||
}
|
||||
17
FaKrosnoEfDataModel/Entities/Recipient.cs
Normal file
17
FaKrosnoEfDataModel/Entities/Recipient.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Entities
|
||||
{
|
||||
public class Recipient : EntityBase
|
||||
{
|
||||
public int PurchaserID { get; set; }
|
||||
public Purchaser Purchaser { get; set; }
|
||||
public string RecipientCode { get; set; }
|
||||
public string RecipientDesc { get; set; }
|
||||
public ICollection<ScheduleOrder> ScheduleOrders { get; set; }
|
||||
}
|
||||
}
|
||||
21
FaKrosnoEfDataModel/Entities/ScheduleOrder.cs
Normal file
21
FaKrosnoEfDataModel/Entities/ScheduleOrder.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Entities
|
||||
{
|
||||
public class ScheduleOrder : EntityBase
|
||||
{
|
||||
public string PONum { get; set; }
|
||||
public int OrderID { get; set; }
|
||||
public int RecipientID { get; set; }
|
||||
public Recipient Recipient { get; set; }
|
||||
public DateTime LastUpdateDate { get; set; }
|
||||
public int DocNumber { get; set; }
|
||||
public string? DocType { get; set; }
|
||||
public ICollection<ScheduleOrderDetail> ScheduleOrderDetails { get; set; }
|
||||
public ICollection<ScheduleOrderMisc> ScheduleOrderMiscs { get; set; }
|
||||
}
|
||||
}
|
||||
19
FaKrosnoEfDataModel/Entities/ScheduleOrderDetail.cs
Normal file
19
FaKrosnoEfDataModel/Entities/ScheduleOrderDetail.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Entities
|
||||
{
|
||||
public class ScheduleOrderDetail : EntityBase
|
||||
{
|
||||
public int ScheduleOrderID { get; set; }
|
||||
public ScheduleOrder ScheduleOrder { get; set; }
|
||||
public string Sc_productCode { get; set; }
|
||||
public string Sh_productCode { get; set; }
|
||||
public int? Price { get; set; }
|
||||
public ICollection<ScheduleOrderDetailDetail> ScheduleOrderDetailDetails { get; set; }
|
||||
public ICollection<ScheduleOrderDetailMisc> ScheduleOrderDetailMiscs { get; set; }
|
||||
}
|
||||
}
|
||||
25
FaKrosnoEfDataModel/Entities/ScheduleOrderDetailDetail.cs
Normal file
25
FaKrosnoEfDataModel/Entities/ScheduleOrderDetailDetail.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Entities
|
||||
{
|
||||
public class ScheduleOrderDetailDetail : EntityBase
|
||||
{
|
||||
public int ScheduleOrderDetailID { get; set; }
|
||||
public ScheduleOrderDetail ScheduleOrderDetail { get; set; }
|
||||
public int Qty { get; set; }
|
||||
public DateTime DateFrom { get; set; }
|
||||
public DateTime DateTo { get; set; }
|
||||
public string SccType { get; set; }
|
||||
public string? SccDesc { get; set; }
|
||||
public string? QtyType { get; set; }
|
||||
public string? QtyDesc { get; set; }
|
||||
public string Status { get; set; }
|
||||
public DateTime? ShipDate { get; set; }
|
||||
public DateTime LastUpdateDate { get; set; }
|
||||
public ICollection<ScheduleOrderDetailDetailMisc> ScheduleOrderDetailDetailMiscs { get; set; }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Entities
|
||||
{
|
||||
public class ScheduleOrderDetailDetailMisc : EntityBase
|
||||
{
|
||||
public int ScheduleOrderDetailDetailID { get; set; }
|
||||
public ScheduleOrderDetailDetail ScheduleOrderDetailDetail { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Value { get; set; }
|
||||
public string? Label { get; set; }
|
||||
public bool Display { get; set; }
|
||||
}
|
||||
}
|
||||
18
FaKrosnoEfDataModel/Entities/ScheduleOrderDetailMisc.cs
Normal file
18
FaKrosnoEfDataModel/Entities/ScheduleOrderDetailMisc.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Entities
|
||||
{
|
||||
public class ScheduleOrderDetailMisc : EntityBase
|
||||
{
|
||||
public int ScheduleOrderDetailID { get; set; }
|
||||
public ScheduleOrderDetail ScheduleOrderDetail { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Value { get; set; }
|
||||
public string? Label { get; set; }
|
||||
public bool Display { get; set; }
|
||||
}
|
||||
}
|
||||
18
FaKrosnoEfDataModel/Entities/ScheduleOrderMisc.cs
Normal file
18
FaKrosnoEfDataModel/Entities/ScheduleOrderMisc.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Entities
|
||||
{
|
||||
public class ScheduleOrderMisc : EntityBase
|
||||
{
|
||||
public int ScheduleOrderID { get; set; }
|
||||
public ScheduleOrder ScheduleOrder { get; set; }
|
||||
public string Type { get; set; }
|
||||
public string Value { get; set; }
|
||||
public string? Label { get; set; }
|
||||
public bool Display { get; set; }
|
||||
}
|
||||
}
|
||||
90
FaKrosnoEfDataModel/FaKrosnoDbContext.cs
Normal file
90
FaKrosnoEfDataModel/FaKrosnoDbContext.cs
Normal file
@@ -0,0 +1,90 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using FaKrosnoEfDataModel.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
|
||||
namespace FaKrosnoEfDataModel
|
||||
{
|
||||
public class FaKrosnoDbContext : DbContext
|
||||
{
|
||||
public FaKrosnoDbContext(DbContextOptions<FaKrosnoDbContext> options) : base(options) { }
|
||||
|
||||
public DbSet<Purchaser> Purchasers { get; set; }
|
||||
public DbSet<Recipient> Recipients { get; set; }
|
||||
public DbSet<ScheduleOrder> ScheduleOrders { get; set; }
|
||||
public DbSet<ScheduleOrderDetail> ScheduleOrderDetails { get; set; }
|
||||
public DbSet<ScheduleOrderDetailDetail> ScheduleOrderDetailDetails { get; set; }
|
||||
public DbSet<ScheduleOrderDetailDetailMisc> ScheduleOrderDetailDetailMiscs { get; set; }
|
||||
public DbSet<ScheduleOrderDetailMisc> ScheduleOrderDetailMiscs { get; set; }
|
||||
public DbSet<ScheduleOrderMisc> ScheduleOrderMiscs { get; set; }
|
||||
|
||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||
{
|
||||
var configuration = new ConfigurationBuilder()
|
||||
.SetBasePath(Directory.GetCurrentDirectory())
|
||||
.AddJsonFile("appsettings.json")
|
||||
.Build();
|
||||
|
||||
var connectionString = configuration.GetConnectionString("FaKrosnoConnection");
|
||||
optionsBuilder.UseSqlServer(connectionString, options => options.CommandTimeout(300));
|
||||
}
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.Entity<Purchaser>().ToTable("purchaser");
|
||||
|
||||
modelBuilder.Entity<Recipient>().ToTable("recipient")
|
||||
.HasOne(p => p.Purchaser)
|
||||
.WithMany(p => p.Recipients)
|
||||
.HasForeignKey(p => p.PurchaserID);
|
||||
|
||||
modelBuilder.Entity<ScheduleOrder>().ToTable("schedule_order")
|
||||
.HasOne(s => s.Recipient)
|
||||
.WithMany(r => r.ScheduleOrders)
|
||||
.HasForeignKey(s => s.RecipientID);
|
||||
|
||||
modelBuilder.Entity<ScheduleOrderDetail>().ToTable("schedule_order_detail")
|
||||
.HasOne(s => s.ScheduleOrder)
|
||||
.WithMany(s => s.ScheduleOrderDetails)
|
||||
.HasForeignKey(s => s.ScheduleOrderID);
|
||||
|
||||
modelBuilder.Entity<ScheduleOrderDetailDetail>().ToTable("schedule_order_detail_detail")
|
||||
.HasOne(s => s.ScheduleOrderDetail)
|
||||
.WithMany(s => s.ScheduleOrderDetailDetails)
|
||||
.HasForeignKey(s => s.ScheduleOrderDetailID);
|
||||
|
||||
modelBuilder.Entity<ScheduleOrderDetailDetailMisc>().ToTable("schedule_order_detail_detail_misc")
|
||||
.HasOne(s => s.ScheduleOrderDetailDetail)
|
||||
.WithMany(s => s.ScheduleOrderDetailDetailMiscs)
|
||||
.HasForeignKey(s => s.ScheduleOrderDetailDetailID);
|
||||
|
||||
modelBuilder.Entity<ScheduleOrderDetailMisc>().ToTable("schedule_order_detail_misc")
|
||||
.HasOne(s => s.ScheduleOrderDetail)
|
||||
.WithMany(s => s.ScheduleOrderDetailMiscs)
|
||||
.HasForeignKey(s => s.ScheduleOrderDetailID);
|
||||
|
||||
modelBuilder.Entity<ScheduleOrderMisc>().ToTable("schedule_order_misc")
|
||||
.HasOne(s => s.ScheduleOrder)
|
||||
.WithMany(s => s.ScheduleOrderMiscs)
|
||||
.HasForeignKey(s => s.ScheduleOrderID);
|
||||
|
||||
modelBuilder.Entity<ScheduleOrderDetail>(entity => entity.Property(x => x.Price).IsRequired(false));
|
||||
|
||||
modelBuilder.Entity<ScheduleOrderDetailMisc>(entity => entity.Property(x => x.Label).IsRequired(false));
|
||||
|
||||
modelBuilder.Entity<ScheduleOrderDetailDetailMisc>(entity => entity.Property(x => x.Label).IsRequired(false));
|
||||
|
||||
modelBuilder.Entity<ScheduleOrderDetailDetail>(entity =>
|
||||
{
|
||||
entity.Property(x => x.SccDesc).IsRequired(false);
|
||||
entity.Property(x => x.QtyType).IsRequired(false);
|
||||
entity.Property(x => x.QtyDesc).IsRequired(false);
|
||||
entity.Property(x => x.ShipDate).IsRequired(false);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
31
FaKrosnoEfDataModel/FaKrosnoEfDataModel.csproj
Normal file
31
FaKrosnoEfDataModel/FaKrosnoEfDataModel.csproj
Normal file
@@ -0,0 +1,31 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AutoMapper" Version="13.0.1" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="9.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="9.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="9.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Update="appsettings.json">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
25
FaKrosnoEfDataModel/MappingProfile.cs
Normal file
25
FaKrosnoEfDataModel/MappingProfile.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using AutoMapper;
|
||||
using FaKrosnoEfDataModel.Dtos;
|
||||
using FaKrosnoEfDataModel.Entities;
|
||||
|
||||
namespace FaKrosnoEfDataModel
|
||||
{
|
||||
public class MappingProfile : Profile
|
||||
{
|
||||
public MappingProfile()
|
||||
{
|
||||
CreateMap<EntityBase, DtoBase>().ReverseMap();
|
||||
CreateMap<Purchaser, PurchaserDto>().IncludeBase<EntityBase, DtoBase>().ReverseMap();
|
||||
CreateMap<Recipient, RecipientDto>().IncludeBase<EntityBase, DtoBase>().ReverseMap();
|
||||
CreateMap<ScheduleOrder, ScheduleOrderDto>().IncludeBase<EntityBase, DtoBase>().ReverseMap();
|
||||
CreateMap<ScheduleOrderDetail, ScheduleOrderDetailDto>().IncludeBase<EntityBase, DtoBase>().ReverseMap();
|
||||
CreateMap<ScheduleOrderDetailDetail, ScheduleOrderDetailDetailDto>().IncludeBase<EntityBase, DtoBase>()
|
||||
.ReverseMap();
|
||||
CreateMap<ScheduleOrderDetailDetailMisc, ScheduleOrderDetailDetailMiscDto>()
|
||||
.IncludeBase<EntityBase, DtoBase>().ReverseMap();
|
||||
CreateMap<ScheduleOrderDetailMisc, ScheduleOrderDetailMiscDto>().IncludeBase<EntityBase, DtoBase>()
|
||||
.ReverseMap();
|
||||
CreateMap<ScheduleOrderMisc, ScheduleOrderMiscDto>().IncludeBase<EntityBase, DtoBase>().ReverseMap();
|
||||
}
|
||||
}
|
||||
}
|
||||
33
FaKrosnoEfDataModel/Queries/ScheduleOrderQueries.cs
Normal file
33
FaKrosnoEfDataModel/Queries/ScheduleOrderQueries.cs
Normal file
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using FaKrosnoEfDataModel.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Queries
|
||||
{
|
||||
public static class ScheduleOrderQueries
|
||||
{
|
||||
public static readonly Func<FaKrosnoDbContext, IEnumerable<ScheduleOrder?>> GetEntities =
|
||||
EF.CompileQuery((FaKrosnoDbContext context) => context.ScheduleOrders.Include(x => x.Recipient).ThenInclude(x => x.Purchaser)
|
||||
.Include(x => x.ScheduleOrderDetails).ThenInclude(x => x.ScheduleOrderDetailMiscs)
|
||||
.Include(x => x.ScheduleOrderDetails).ThenInclude(x => x.ScheduleOrderDetailDetails)
|
||||
.ThenInclude(x => x.ScheduleOrderDetailDetailMiscs).Include(x => x.ScheduleOrderMiscs));
|
||||
|
||||
public static readonly Func<FaKrosnoDbContext, DateTime, IEnumerable<ScheduleOrder?>> GetEntitiesByDate =
|
||||
EF.CompileQuery((FaKrosnoDbContext context, DateTime fromDate) => context.ScheduleOrders
|
||||
.Include(x => x.Recipient).ThenInclude(x => x.Purchaser).Include(x => x.ScheduleOrderDetails)
|
||||
.ThenInclude(x => x.ScheduleOrderDetailMiscs).Include(x => x.ScheduleOrderDetails)
|
||||
.ThenInclude(x => x.ScheduleOrderDetailDetails).ThenInclude(x => x.ScheduleOrderDetailDetailMiscs)
|
||||
.Include(x => x.ScheduleOrderMiscs).Where(x => x.LastUpdateDate > fromDate));
|
||||
|
||||
public static readonly Func<FaKrosnoDbContext, int, ScheduleOrder?> GetById = EF.CompileQuery(
|
||||
(FaKrosnoDbContext context, int id) => context.ScheduleOrders.Include(x => x.Recipient).ThenInclude(x => x.Purchaser)
|
||||
.Include(x => x.ScheduleOrderDetails).ThenInclude(x => x.ScheduleOrderDetailMiscs)
|
||||
.Include(x => x.ScheduleOrderDetails).ThenInclude(x => x.ScheduleOrderDetailDetails)
|
||||
.ThenInclude(x => x.ScheduleOrderDetailDetailMiscs).Include(x => x.ScheduleOrderMiscs)
|
||||
.FirstOrDefault(x => x.ID == id));
|
||||
}
|
||||
}
|
||||
14
FaKrosnoEfDataModel/Services/IScheduleOrderDetailsService.cs
Normal file
14
FaKrosnoEfDataModel/Services/IScheduleOrderDetailsService.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using FaKrosnoEfDataModel.Dtos;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Services
|
||||
{
|
||||
public interface IScheduleOrderDetailsService
|
||||
{
|
||||
Task<IEnumerable<ScheduleOrderDetailDto>?> GetScheduleOrderDetailsAsync(int scheduleOrderId);
|
||||
}
|
||||
}
|
||||
18
FaKrosnoEfDataModel/Services/IScheduleOrderService.cs
Normal file
18
FaKrosnoEfDataModel/Services/IScheduleOrderService.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using FaKrosnoEfDataModel.Dtos;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Services
|
||||
{
|
||||
public interface IScheduleOrderService
|
||||
{
|
||||
Task<IEnumerable<ScheduleOrderDto?>> GetEntities();
|
||||
Task<ScheduleOrderDto?> GetById(int id);
|
||||
Task<IEnumerable<ScheduleOrderDto?>> GetByRecipientId(int recipientId);
|
||||
Task<IEnumerable<ScheduleOrderDto?>> GetEntitiesByLastUpdateDate(DateTime date);
|
||||
Task<IEnumerable<ScheduleOrderDto?>> GetByRecipientAndLastUpdateDate(int recipientId, DateTime date);
|
||||
}
|
||||
}
|
||||
25
FaKrosnoEfDataModel/Services/ScheduleOrderDetailsService.cs
Normal file
25
FaKrosnoEfDataModel/Services/ScheduleOrderDetailsService.cs
Normal file
@@ -0,0 +1,25 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using AutoMapper;
|
||||
using AutoMapper.QueryableExtensions;
|
||||
using FaKrosnoEfDataModel.Dtos;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Services
|
||||
{
|
||||
public class ScheduleOrderDetailsService : ServiceBase<ScheduleOrderDetailDto>, IScheduleOrderDetailsService
|
||||
{
|
||||
public ScheduleOrderDetailsService(FaKrosnoDbContext context, IMapper mapper) : base(context, mapper)
|
||||
{
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<ScheduleOrderDetailDto>?> GetScheduleOrderDetailsAsync(int scheduleOrderId)
|
||||
{
|
||||
return await Context.ScheduleOrderDetails.Where(x => x.ScheduleOrderID == scheduleOrderId)
|
||||
.ProjectTo<ScheduleOrderDetailDto>(Mapper.ConfigurationProvider).ToListAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
51
FaKrosnoEfDataModel/Services/ScheduleOrderService.cs
Normal file
51
FaKrosnoEfDataModel/Services/ScheduleOrderService.cs
Normal file
@@ -0,0 +1,51 @@
|
||||
using AutoMapper;
|
||||
using FaKrosnoEfDataModel.Dtos;
|
||||
using FaKrosnoEfDataModel.Entities;
|
||||
using FaKrosnoEfDataModel.Queries;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Services
|
||||
{
|
||||
public class ScheduleOrderService : ServiceBase<ScheduleOrderDto>, IScheduleOrderService
|
||||
{
|
||||
public ScheduleOrderService(FaKrosnoDbContext context, IMapper mapper) : base(context, mapper)
|
||||
{
|
||||
}
|
||||
|
||||
public override async Task<ScheduleOrderDto?> GetById(int id)
|
||||
{
|
||||
var scheduleOrder = await Task.FromResult(ScheduleOrderQueries.GetById(Context, id));
|
||||
|
||||
return scheduleOrder != null ? Mapper.Map<ScheduleOrderDto>(scheduleOrder) : null;
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<ScheduleOrderDto?>> GetByRecipientId(int recipientId)
|
||||
{
|
||||
IList<ScheduleOrderDto> scheduleOrders = (await GetAll()).ToList();
|
||||
|
||||
return scheduleOrders.Where(x => x?.RecipientID == recipientId);
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<ScheduleOrderDto?>> GetByRecipientAndLastUpdateDate(int recipientId, DateTime date)
|
||||
{
|
||||
IList<ScheduleOrderDto?> scheduleOrders = (await GetEntitiesByLastUpdateDate(date)).ToList();
|
||||
|
||||
return scheduleOrders.Where(x => x?.RecipientID == recipientId && x.LastUpdateDate >= date);
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<ScheduleOrderDto?>> GetEntities()
|
||||
{
|
||||
IList<ScheduleOrder> scheduleOrders = await Context.ScheduleOrders.Include(x => x.Recipient)
|
||||
.ThenInclude(x => x.Purchaser).ToListAsync();
|
||||
|
||||
return Mapper.Map<IEnumerable<ScheduleOrderDto>>(scheduleOrders);
|
||||
}
|
||||
public async Task<IEnumerable<ScheduleOrderDto?>> GetEntitiesByLastUpdateDate(DateTime date)
|
||||
{
|
||||
IList<ScheduleOrder?> scheduleOrders =
|
||||
(await Task.FromResult(ScheduleOrderQueries.GetEntitiesByDate(Context, date))).ToList();
|
||||
|
||||
return Mapper.Map<IEnumerable<ScheduleOrderDto>>(scheduleOrders);
|
||||
}
|
||||
}
|
||||
}
|
||||
73
FaKrosnoEfDataModel/Services/ServiceBase.cs
Normal file
73
FaKrosnoEfDataModel/Services/ServiceBase.cs
Normal file
@@ -0,0 +1,73 @@
|
||||
using AutoMapper;
|
||||
using AutoMapper.Internal;
|
||||
using FaKrosnoEfDataModel.Dtos;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using System.Reflection;
|
||||
|
||||
namespace FaKrosnoEfDataModel.Services
|
||||
{
|
||||
public class ServiceBase<T> where T : DtoBase
|
||||
{
|
||||
protected readonly FaKrosnoDbContext Context;
|
||||
protected readonly IMapper Mapper;
|
||||
protected readonly Type EntityType;
|
||||
|
||||
public ServiceBase(FaKrosnoDbContext context, IMapper mapper)
|
||||
{
|
||||
Context = context;
|
||||
Mapper = mapper;
|
||||
EntityType = FindEntityTypeForDto(typeof(T));
|
||||
}
|
||||
|
||||
public virtual async Task<T?> GetById(int id)
|
||||
{
|
||||
object? entity = await Context.FindAsync(EntityType, id);
|
||||
|
||||
if (entity != null)
|
||||
{
|
||||
return (T)Mapper.Map(entity, entity.GetType(), typeof(T));
|
||||
}
|
||||
|
||||
return default;
|
||||
}
|
||||
|
||||
public virtual async Task<IEnumerable<T>> GetAll()
|
||||
{
|
||||
MethodInfo? setMethod =
|
||||
typeof(DbContext).GetMethod("Set", Array.Empty<Type>())?.MakeGenericMethod(EntityType);
|
||||
|
||||
IQueryable? dbSet = setMethod?.Invoke(Context, null) as IQueryable;
|
||||
|
||||
if (dbSet == null)
|
||||
{
|
||||
throw new InvalidOperationException("Failed to get DbSet for entity type.");
|
||||
}
|
||||
|
||||
IList<object> entities = await Task.Run(() => dbSet.Cast<object>().ToListAsync());
|
||||
|
||||
return entities.Select(e => (T)Mapper.Map(e, e.GetType(), typeof(T)));
|
||||
}
|
||||
|
||||
private Type FindEntityTypeForDto(Type dtoType)
|
||||
{
|
||||
IGlobalConfiguration? internalApi = Mapper.ConfigurationProvider.Internal();
|
||||
|
||||
TypeMap map = internalApi.FindTypeMapFor(dtoType, null);
|
||||
|
||||
if (map != null)
|
||||
{
|
||||
return map.DestinationType;
|
||||
}
|
||||
|
||||
foreach (var typeMap in internalApi.GetAllTypeMaps())
|
||||
{
|
||||
if (typeMap.SourceType == dtoType)
|
||||
{
|
||||
return typeMap.DestinationType;
|
||||
}
|
||||
}
|
||||
|
||||
throw new InvalidOperationException($"No mapping found for DTO type: {dtoType.Name}");
|
||||
}
|
||||
}
|
||||
}
|
||||
5
FaKrosnoEfDataModel/appsettings.json
Normal file
5
FaKrosnoEfDataModel/appsettings.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"FaKrosnoConnection": "Server=192.168.0.7;Database=fakrosnotest;User Id=sa;Password=Tetum#2021!;TrustServerCertificate=true"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user