Compare commits
17 Commits
bb29b1563a
...
b859391ab1
| Author | SHA1 | Date | |
|---|---|---|---|
| b859391ab1 | |||
| 26300d8653 | |||
| 9d07b1e71c | |||
| ec975a2bc3 | |||
| f10f5af541 | |||
| 7d07fc58e9 | |||
| 7e82f688ad | |||
| c325b2122b | |||
| 63adb51263 | |||
| 363606dc61 | |||
| bc192e99a7 | |||
| 69d417616d | |||
| a3cbe69fd6 | |||
| c2e8b335e0 | |||
| 7ed86f18d7 | |||
| 2fd64cb616 | |||
| b89a69b0f3 |
@@ -1,13 +1,7 @@
|
||||
using MediatR;
|
||||
|
||||
namespace WorkFlow.Application.Buttons;
|
||||
namespace WorkFlow.Application.Buttons;
|
||||
|
||||
public record ButtonDto
|
||||
{
|
||||
public int Id { get; init; }
|
||||
|
||||
public required int ProfileId { get; init; }
|
||||
|
||||
public byte? DialogNo { get; init; }
|
||||
|
||||
public string? BtnType { get; init; }
|
||||
@@ -23,6 +17,4 @@ public record ButtonDto
|
||||
public string? DialogCommand { get; init; }
|
||||
|
||||
public string? ConfirmationText { get; init; }
|
||||
}
|
||||
|
||||
public record ReadButtonRequest : IRequest<ButtonDto>;
|
||||
}
|
||||
@@ -3,21 +3,21 @@
|
||||
namespace WorkFlow.Application.Contracts.Repositories;
|
||||
|
||||
/// <summary>
|
||||
/// Repository for retrieving <see cref="ProfileObject"/> entities from the database.
|
||||
/// Repository for retrieving <see cref="PObject"/> entities from the database.
|
||||
/// </summary>
|
||||
public interface IProfileObjRepository
|
||||
{
|
||||
/// <summary>
|
||||
/// Retrieves the list of <see cref="ProfileObject"/> associated with a given user ID and profile ID by calling a database function.
|
||||
/// Retrieves the list of <see cref="PObject"/> associated with a given user ID and profile ID by calling a database function.
|
||||
/// </summary>
|
||||
/// <param name="userId">The unique identifier of the user whose profile is to be retrieved.</param>
|
||||
/// <param name="profileId">The unique identifier of the profile whose object is to be retrieved.</param>
|
||||
/// <param name="cancel">Propagates notification that operations should be canceled.</param>
|
||||
/// <returns>
|
||||
/// A task that represents the asynchronous operation. The task result contains the <see cref="ProfileObject"/> object if found; otherwise, <c>null</c>.
|
||||
/// A task that represents the asynchronous operation. The task result contains the <see cref="PObject"/> object if found; otherwise, <c>null</c>.
|
||||
/// </returns>
|
||||
/// <remarks>
|
||||
/// Logs an error if no profile is found, or if multiple profiles are returned, indicating potential data issues.
|
||||
/// </remarks>
|
||||
public Task<IEnumerable<ProfileObject>> ReadAsync(int userId, int profileId, CancellationToken cancel = default);
|
||||
public Task<IEnumerable<PObject>> ReadAsync(int userId, int profileId, CancellationToken cancel = default);
|
||||
}
|
||||
@@ -2,15 +2,13 @@
|
||||
|
||||
public class ObjectDto
|
||||
{
|
||||
public long? ObjStateId { get; set; }
|
||||
|
||||
public long? Id { get; set; }
|
||||
|
||||
public IEnumerable<string> Headlines { get; set; } = Array.Empty<string>();
|
||||
|
||||
public IEnumerable<string> Sublines { get; set; } = Array.Empty<string>();
|
||||
|
||||
public string? CmdCheckIn { get; set; }
|
||||
|
||||
public IEnumerable<string?> States { get; set; } = Array.Empty<string>();
|
||||
public ObjectStateDto? State { get; set; }
|
||||
|
||||
public IEnumerable<ObjectStateHistDto> StateHistories { get; set; } = Array.Empty<ObjectStateHistDto>();
|
||||
}
|
||||
|
||||
13
src/WorkFlow.Application/Dto/ObjectStateDto.cs
Normal file
13
src/WorkFlow.Application/Dto/ObjectStateDto.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
namespace WorkFlow.Application.Dto;
|
||||
|
||||
public record ObjectStateDto
|
||||
{
|
||||
public virtual string? Intl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Holds state 2, 3 and 4 as a list of strings.
|
||||
/// </summary>
|
||||
public IEnumerable<string> Others { get; set; } = Array.Empty<string>();
|
||||
|
||||
public virtual IEnumerable<PControlsTFDto>? TFControls { get; set; }
|
||||
}
|
||||
15
src/WorkFlow.Application/Dto/ObjectStateHistDto.cs
Normal file
15
src/WorkFlow.Application/Dto/ObjectStateHistDto.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
namespace WorkFlow.Application.Dto;
|
||||
|
||||
public record ObjectStateHistDto
|
||||
{
|
||||
public virtual string? Intl { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Holds state 2, 3 and 4 as a list of strings.
|
||||
/// </summary>
|
||||
public IEnumerable<string> Others { get; set; } = Array.Empty<string>();
|
||||
|
||||
public string? ChangedWho { get; set; }
|
||||
|
||||
public DateTime? ChangedWhen { get; set; }
|
||||
}
|
||||
24
src/WorkFlow.Application/Dto/PControlsTFDto.cs
Normal file
24
src/WorkFlow.Application/Dto/PControlsTFDto.cs
Normal file
@@ -0,0 +1,24 @@
|
||||
namespace WorkFlow.Application.Dto;
|
||||
|
||||
public record PControlsTFDto
|
||||
{
|
||||
public byte? DialogNo { get; set; }
|
||||
|
||||
public string? AttrName { get; set; }
|
||||
|
||||
public string? CtrlType { get; set; }
|
||||
|
||||
public string? Caption { get; set; }
|
||||
|
||||
public string? Text { get; set; }
|
||||
|
||||
public string? Icon { get; set; }
|
||||
|
||||
public bool? Mandatory { get; set; }
|
||||
|
||||
public string? ChoiceList { get; set; }
|
||||
|
||||
public bool? ReadOnly { get; set; }
|
||||
|
||||
public byte? Sequ { get; set; }
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
using DigitalData.UserManager.Application.DTOs.User;
|
||||
|
||||
namespace WorkFlow.Application.Dto
|
||||
{
|
||||
public record ProfileControlsTFDto(int Id,
|
||||
int ProfileId,
|
||||
int UserId,
|
||||
long ObjId,
|
||||
string ObjType,
|
||||
string AttrName,
|
||||
string CtrlType,
|
||||
string CtrlCaption,
|
||||
bool Mandatory,
|
||||
bool ReadOnly,
|
||||
string AddedWho,
|
||||
DateTime AddedWhen,
|
||||
string? ChoiceList = null,
|
||||
UserReadDto? User = null);
|
||||
}
|
||||
@@ -4,8 +4,6 @@ namespace WorkFlow.Application.Dto;
|
||||
|
||||
public class ProfileDto
|
||||
{
|
||||
public int? Id { get; init; }
|
||||
|
||||
public byte? TypeId { get; init; }
|
||||
|
||||
public string? Caption { get; init; }
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
namespace WorkFlow.Application.Dto;
|
||||
|
||||
public class ProfileObjStateDto
|
||||
{
|
||||
public IEnumerable<string?> States { get; set; } = Array.Empty<string>();
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
namespace WorkFlow.Application.Dto
|
||||
{
|
||||
public record StateDto(int Id, string IntlState, string AddedWho, DateTime AddedWhen);
|
||||
}
|
||||
@@ -11,15 +11,16 @@ public class MappingProfile : AutoMapper.Profile
|
||||
// Mapping entity to DTO
|
||||
CreateMap<Config, ConfigDto>();
|
||||
CreateMap<Profile, ProfileDto>();
|
||||
CreateMap<ProfileControlsTF, ProfileControlsTFDto>();
|
||||
CreateMap<ProfileObjState, ProfileObjStateDto>();
|
||||
CreateMap<State, StateDto>();
|
||||
CreateMap<PControlsTF, PControlsTFDto>();
|
||||
CreateMap<Button, ButtonDto>();
|
||||
CreateMap<ProfileObject, ObjectDto>()
|
||||
.ForMember(dest => dest.Headlines, opt => opt.MapFrom(src =>
|
||||
new[] { src.Headline1, src.Headline2 }))
|
||||
.ForMember(dest => dest.Sublines, opt => opt.MapFrom(src =>
|
||||
new[] { src.Subline1, src.Subline2 }))
|
||||
.ForMember(dest => dest.States, opt => opt.MapFrom(src => src.States));
|
||||
CreateMap<PObject, ObjectDto>()
|
||||
.ForMember(dest => dest.Headlines, opt => opt.MapFrom(src => new[] { src.Headline1, src.Headline2 }))
|
||||
.ForMember(dest => dest.Sublines, opt => opt.MapFrom(src => new[] { src.Subline1, src.Subline2 }));
|
||||
CreateMap<PObjectState, ObjectStateDto>()
|
||||
.ForMember(dest => dest.Intl, opt => opt.MapFrom(src => src.State1 != null ? src.State1.IntlState : null))
|
||||
.ForMember(dest => dest.Others, opt => opt.MapFrom(src => new string?[] { src.State2, src.State3, src.State4 }));
|
||||
CreateMap<PObjectStateHist, ObjectStateHistDto>()
|
||||
.ForMember(dest => dest.Intl, opt => opt.MapFrom(src => src.State1 != null ? src.State1.IntlState : null))
|
||||
.ForMember(dest => dest.Others, opt => opt.MapFrom(src => new string?[] { src.State2, src.State3, src.State4 }));
|
||||
}
|
||||
}
|
||||
@@ -4,20 +4,15 @@ using System.ComponentModel.DataAnnotations.Schema;
|
||||
namespace WorkFlow.Domain.Entities;
|
||||
|
||||
[Table("TBMWF_PROF_CONTROLS_TF", Schema = "dbo")]
|
||||
public class ProfileControlsTF
|
||||
public class PControlsTF
|
||||
{
|
||||
[Key]
|
||||
[Column("GUID", TypeName = "bigint")]
|
||||
public long Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Although this field is marked as <c>nullable</c> in the database schema to allow
|
||||
/// for greater flexibility during database-level operations or migrations, it is
|
||||
/// treated as <c>required</c> and <c>not null</c> within the application logic.
|
||||
/// Validation should be enforced at the application level to ensure a value is provided.
|
||||
/// </summary>
|
||||
[Required]
|
||||
[Column("OBJ_STATE_ID", TypeName = "bigint")]
|
||||
public long? StateId { get; set; }
|
||||
public long ObjStateId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Although this field is marked as <c>nullable</c> in the database schema to allow
|
||||
@@ -89,14 +84,11 @@ public class ProfileControlsTF
|
||||
public bool? ReadOnly { get; set; }
|
||||
|
||||
[Column("SEQU", TypeName = "tinyint")]
|
||||
public byte? Sequ { get; set; } = 0;
|
||||
public byte? Sequ { get; set; }
|
||||
|
||||
[Column("ADDED_WHO", TypeName = "nvarchar(100)")]
|
||||
public required string AddedWho { get; set; }
|
||||
|
||||
[Column("ADDED_WHEN", TypeName = "datetime")]
|
||||
public DateTime AddedWhen { get; set; }
|
||||
|
||||
[ForeignKey("StateId")]
|
||||
public virtual ProfileObjState? State { get; set; }
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace WorkFlow.Domain.Entities;
|
||||
|
||||
public class ProfileObject
|
||||
public class PObject
|
||||
{
|
||||
[Column("ObjStateID")]
|
||||
public long? ObjStateId { get; set; }
|
||||
@@ -26,5 +26,7 @@ public class ProfileObject
|
||||
public string? CmdCheckIn { get; set; }
|
||||
|
||||
[ForeignKey("ObjStateId")]
|
||||
public virtual ProfileObjState? States { get; set; }
|
||||
public virtual PObjectState? State { get; set; }
|
||||
|
||||
public virtual IEnumerable<PObjectStateHist>? StateHistories { get; set; }
|
||||
}
|
||||
@@ -4,7 +4,7 @@ using System.ComponentModel.DataAnnotations.Schema;
|
||||
namespace WorkFlow.Domain.Entities;
|
||||
|
||||
[Table("TBMWF_PROFILE_OBJ_STATE", Schema = "dbo")]
|
||||
public class ProfileObjState
|
||||
public class PObjectState
|
||||
{
|
||||
[Key]
|
||||
[Column("GUID", TypeName = "bigint")]
|
||||
@@ -82,9 +82,7 @@ public class ProfileObjState
|
||||
[ForeignKey("StateId")]
|
||||
public virtual State? State1 { get; set; }
|
||||
|
||||
[NotMapped]
|
||||
public IEnumerable<string?> States => new List<string?>
|
||||
{
|
||||
State1?.IntlState, State2, State3, State4
|
||||
};
|
||||
public virtual IEnumerable<PControlsTF>? TFControls { get; set; }
|
||||
|
||||
public virtual IEnumerable<TfFile>? TfFiles { get; set; }
|
||||
}
|
||||
65
src/WorkFlow.Domain/Entities/PObjectStateHist.cs
Normal file
65
src/WorkFlow.Domain/Entities/PObjectStateHist.cs
Normal file
@@ -0,0 +1,65 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace WorkFlow.Domain.Entities;
|
||||
|
||||
[Table("TBMWF_PROFILE_OBJ_STATE_HISTORY", Schema = "dbo")]
|
||||
public class PObjectStateHist
|
||||
{
|
||||
[Key]
|
||||
[Column("GUID", TypeName = "bigint")]
|
||||
public long Id { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Although this field is marked as <c>nullable</c> in the database schema to allow
|
||||
/// for greater flexibility during database-level operations or migrations, it is
|
||||
/// treated as <c>required</c> and <c>not null</c> within the application logic.
|
||||
/// Validation should be enforced at the application level to ensure a value is provided.
|
||||
/// </summary>
|
||||
[Column("MWF_PROFILE_ID", TypeName = "int")]
|
||||
public int? ProfileId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Although this field is marked as <c>nullable</c> in the database schema to allow
|
||||
/// for greater flexibility during database-level operations or migrations, it is
|
||||
/// treated as <c>required</c> and <c>not null</c> within the application logic.
|
||||
/// Validation should be enforced at the application level to ensure a value is provided.
|
||||
/// </summary>
|
||||
[Column("USR_ID", TypeName = "int")]
|
||||
public int? UserId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Although this field is marked as <c>nullable</c> in the database schema to allow
|
||||
/// for greater flexibility during database-level operations or migrations, it is
|
||||
/// treated as <c>required</c> and <c>not null</c> within the application logic.
|
||||
/// Validation should be enforced at the application level to ensure a value is provided.
|
||||
/// </summary>
|
||||
[Column("OBJ_ID", TypeName = "bigint")]
|
||||
public long? ObjectId { get; set; }
|
||||
|
||||
[Required]
|
||||
[Column("STATE_ID", TypeName = "int")]
|
||||
public int StateId { get; set; }
|
||||
|
||||
[Column("STATE2", TypeName = "nvarchar(100)")]
|
||||
[StringLength(100)]
|
||||
public string? State2 { get; set; }
|
||||
|
||||
[Column("STATE3", TypeName = "nvarchar(100)")]
|
||||
[StringLength(100)]
|
||||
public string? State3 { get; set; }
|
||||
|
||||
[Column("STATE4", TypeName = "nvarchar(100)")]
|
||||
[StringLength(100)]
|
||||
public string? State4 { get; set; }
|
||||
|
||||
[Column("CHANGED_WHO", TypeName = "nvarchar(100)")]
|
||||
[StringLength(100)]
|
||||
public string? ChangedWho { get; set; }
|
||||
|
||||
[Column("CHANGED_WHEN", TypeName = "datetime")]
|
||||
public DateTime? ChangedWhen { get; set; }
|
||||
|
||||
[ForeignKey("StateId")]
|
||||
public virtual State? State1 { get; set; }
|
||||
}
|
||||
@@ -26,7 +26,7 @@ public class Profile
|
||||
public string? BackColor { get; set; }
|
||||
|
||||
[NotMapped]
|
||||
public IEnumerable<ProfileObject>? Objects { get; set; }
|
||||
public IEnumerable<PObject>? Objects { get; set; }
|
||||
|
||||
[NotMapped]
|
||||
public IEnumerable<Button>? Buttons { get; set; }
|
||||
|
||||
60
src/WorkFlow.Domain/Entities/TfFile.cs
Normal file
60
src/WorkFlow.Domain/Entities/TfFile.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace WorkFlow.Domain.Entities;
|
||||
|
||||
[Table("TBMWF_TF_FILES")]
|
||||
public class TfFile
|
||||
{
|
||||
[Key]
|
||||
[Column("GUID", TypeName = "bigint")]
|
||||
public long Id { get; set; }
|
||||
|
||||
[Required]
|
||||
[Column("OBJ_STATE_ID", TypeName = "bigint")]
|
||||
public long ObjStateId { get; set; }
|
||||
|
||||
[Required]
|
||||
[StringLength(512)]
|
||||
[Column("F_FAPTH", TypeName = "nvarchar(512)")]
|
||||
public string FFapth { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Although this field is marked as <c>nullable</c> in the database schema to allow
|
||||
/// for greater flexibility during database-level operations or migrations, it is
|
||||
/// treated as <c>required</c> and <c>not null</c> within the application logic.
|
||||
/// Validation should be enforced at the application level to ensure a value is provided.
|
||||
/// </summary>
|
||||
[Column("HEADLINE", TypeName = "nvarchar(100)")]
|
||||
public string? Headline { get; set; }
|
||||
|
||||
[StringLength(100)]
|
||||
[Column("SUBLINE", TypeName = "nvarchar(100)")]
|
||||
public string? Subline { get; set; }
|
||||
|
||||
[StringLength(250)]
|
||||
[Column("COMMENT", TypeName = "nvarchar(250)")]
|
||||
public string? Comment { get; set; }
|
||||
|
||||
[StringLength(100)]
|
||||
[Column("ICON", TypeName = "nvarchar(100)")]
|
||||
public string? Icon { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Although this field is marked as <c>nullable</c> in the database schema to allow
|
||||
/// for greater flexibility during database-level operations or migrations, it is
|
||||
/// treated as <c>required</c> and <c>not null</c> within the application logic.
|
||||
/// Validation should be enforced at the application level to ensure a value is provided.
|
||||
/// </summary>
|
||||
[Column("ADDED_WHO", TypeName = "nvarchar(100)")]
|
||||
public string? AddedWho { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Although this field is marked as <c>nullable</c> in the database schema to allow
|
||||
/// for greater flexibility during database-level operations or migrations, it is
|
||||
/// treated as <c>required</c> and <c>not null</c> within the application logic.
|
||||
/// Validation should be enforced at the application level to ensure a value is provided.
|
||||
/// </summary>
|
||||
[Column("ADDED_WHEN", TypeName = "datetime")]
|
||||
public DateTime? AddedWhen { get; set; }
|
||||
}
|
||||
@@ -13,14 +13,14 @@ public static class DependencyInjection
|
||||
public static IServiceCollection AddWorkFlowRepositories(this IServiceCollection services)
|
||||
{
|
||||
services.TryAddScoped<IProfileRepository, ProfileRepository>();
|
||||
services.TryAddScoped<IProfileObjRepository, ProfileObjRepository>();
|
||||
services.TryAddScoped<IProfileObjRepository, PObjectRepository>();
|
||||
|
||||
services.AddDbRepository<WFDBContext, Config>(c => c.Configs).UseAutoMapper();
|
||||
services.AddDbRepository<WFDBContext, ProfileControlsTF>(c => c.ProfileControlsTFs).UseAutoMapper();
|
||||
services.AddDbRepository<WFDBContext, PControlsTF>(c => c.ProfileControlsTFs).UseAutoMapper();
|
||||
services.AddDbRepository<WFDBContext, State>(c => c.States).UseAutoMapper();
|
||||
services.AddDbRepository<WFDBContext, Button>(c => c.Buttons).UseAutoMapper();
|
||||
services.AddDbRepository<WFDBContext, State>(c => c.States).UseAutoMapper();
|
||||
services.AddDbRepository<WFDBContext, ProfileObjState>(c => c.ProfileObjStates).UseAutoMapper();
|
||||
services.AddDbRepository<WFDBContext, PObjectState>(c => c.ProfileObjStates).UseAutoMapper();
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
@@ -5,36 +5,39 @@ using WorkFlow.Domain.Entities;
|
||||
namespace WorkFlow.Infrastructure.Repositories;
|
||||
|
||||
/// <summary>
|
||||
/// Repository implementation for retrieving <see cref="ProfileObject"/> entities from the database.
|
||||
/// Repository implementation for retrieving <see cref="PObject"/> entities from the database.
|
||||
/// </summary>
|
||||
public class ProfileObjRepository : IProfileObjRepository
|
||||
public class PObjectRepository : IProfileObjRepository
|
||||
{
|
||||
private readonly WFDBContext _context;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="ProfileObjRepository"/> class.
|
||||
/// Initializes a new instance of the <see cref="PObjectRepository"/> class.
|
||||
/// </summary>
|
||||
/// <param name="context">The database context used for accessing profile data.</param>
|
||||
public ProfileObjRepository(WFDBContext context)
|
||||
public PObjectRepository(WFDBContext context)
|
||||
{
|
||||
_context = context;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves the list of <see cref="ProfileObject"/> associated with a given user ID and profile ID by calling a database function.
|
||||
/// Retrieves the list of <see cref="PObject"/> associated with a given user ID and profile ID by calling a database function.
|
||||
/// </summary>
|
||||
/// <param name="userId">The unique identifier of the user whose profile is to be retrieved.</param>
|
||||
/// <param name="profileId">The unique identifier of the profile whose object is to be retrieved.</param>
|
||||
/// <param name="cancel">Propagates notification that operations should be canceled.</param>
|
||||
/// <returns>
|
||||
/// A task that represents the asynchronous operation. The task result contains the <see cref="ProfileObject"/> object if found; otherwise, <c>null</c>.
|
||||
/// A task that represents the asynchronous operation. The task result contains the <see cref="PObject"/> object if found; otherwise, <c>null</c>.
|
||||
/// </returns>
|
||||
/// <remarks>
|
||||
/// Logs an error if no profile is found, or if multiple profiles are returned, indicating potential data issues.
|
||||
/// </remarks>
|
||||
public async Task<IEnumerable<ProfileObject>> ReadAsync(int userId, int profileId, CancellationToken cancel = default)
|
||||
public async Task<IEnumerable<PObject>> ReadAsync(int userId, int profileId, CancellationToken cancel = default)
|
||||
=> await _context.Objects
|
||||
.FromSqlRaw("SELECT * FROM [FNMWF_GET_PROFILE_OBJECTS] ({0}, {1})", userId, profileId)
|
||||
.Include(obj => obj.States).ThenInclude(objState => objState.State1)
|
||||
.Include(obj => obj.State).ThenInclude(objState => objState != null ? objState.State1 : null)
|
||||
.Include(obj => obj.State).ThenInclude(objState => objState != null ? objState.TFControls : null)
|
||||
.Include(obj => obj.State).ThenInclude(objState => objState != null ? objState.TfFiles : null)
|
||||
.Include(obj => obj.StateHistories!).ThenInclude(hist => hist != null ? hist.State1 : null)
|
||||
.ToListAsync(cancel);
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
using DigitalData.UserManager.Infrastructure;
|
||||
using DigitalData.UserManager.Infrastructure.Contracts;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.SqlServer.Query.Internal;
|
||||
using WorkFlow.Domain.Entities;
|
||||
|
||||
namespace WorkFlow.Infrastructure;
|
||||
@@ -10,13 +11,13 @@ public class WFDBContext : DbContext, IUserManagerDbContext
|
||||
{
|
||||
public DbSet<Config> Configs { get; set; }
|
||||
|
||||
public DbSet<ProfileControlsTF> ProfileControlsTFs { get; set; }
|
||||
public DbSet<PControlsTF> ProfileControlsTFs { get; set; }
|
||||
|
||||
public DbSet<Profile> Profiles { get; set; }
|
||||
|
||||
public DbSet<ProfileObject> Objects { get; set; }
|
||||
public DbSet<PObject> Objects { get; set; }
|
||||
|
||||
public DbSet<ProfileObjState> ProfileObjStates { get; set; }
|
||||
public DbSet<PObjectState> ProfileObjStates { get; set; }
|
||||
|
||||
public DbSet<State> States { get; set; }
|
||||
|
||||
@@ -45,6 +46,22 @@ public class WFDBContext : DbContext, IUserManagerDbContext
|
||||
//configure model builder for user manager tables
|
||||
modelBuilder.ConfigureUserManager();
|
||||
|
||||
modelBuilder.Entity<PObjectState>()
|
||||
.HasMany(objState => objState.TFControls)
|
||||
.WithOne()
|
||||
.HasForeignKey(control => control.ObjStateId)
|
||||
.OnDelete(DeleteBehavior.Cascade);
|
||||
|
||||
modelBuilder.Entity<PObjectState>()
|
||||
.HasMany(objState => objState.TfFiles)
|
||||
.WithOne()
|
||||
.HasForeignKey(file => file.ObjStateId);
|
||||
|
||||
modelBuilder.Entity<PObject>()
|
||||
.HasMany(p => p.StateHistories)
|
||||
.WithOne()
|
||||
.HasForeignKey(hist => hist.ObjectId);
|
||||
|
||||
base.OnModelCreating(modelBuilder);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user