From 03daa08f13f1747cc66f7c89f9130ccf2019a3b9 Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Mon, 7 Oct 2024 16:20:04 +1000 Subject: [PATCH] =?UTF-8?q?feat(dal):=20=D1=81=D0=BE=D1=85=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D1=8F=D0=B5=D1=82=20=D0=B8=D1=81=D1=82=D0=BE=D1=80=D0=B8?= =?UTF-8?q?=D1=8E=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PARR.DAL/Services/Abstracts/BaseService.cs | 47 +++++++++++++++++----- 1 file changed, 37 insertions(+), 10 deletions(-) diff --git a/PARR.DAL/Services/Abstracts/BaseService.cs b/PARR.DAL/Services/Abstracts/BaseService.cs index 6806de8b..e01c344c 100644 --- a/PARR.DAL/Services/Abstracts/BaseService.cs +++ b/PARR.DAL/Services/Abstracts/BaseService.cs @@ -3,9 +3,7 @@ using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.Extensions.Logging; using PARR.DAL.Context; using PARR.DAL.DomainModels; -using PARR.DAL.Models; using PARR.DAL.Models.Base; -using PARR.DAL.Models.Base.History; using PARR.DAL.Models.Base.History.Base; using PARR.DAL.Services.Interfaces.Base; using System.Reflection; @@ -107,13 +105,20 @@ namespace PARR.DAL.Services.Abstracts // Заполняем поля истории, полями которые есть в исходной таблице FillHistoryProps(obj, ref historyInstance, historyProps); - // Заполняем поля интерфейса IHistoryTable + FillHistoryProp(ref historyInstance, nameof(IHistoryTable.DateAddedToHistory), DateTimeOffset.UtcNow); // Заполняем Id + FillHistoryProp(ref historyInstance, nameof(IBase.Id), Guid.NewGuid()); - - // EntitiContext.Add(historyInstance); + try + { + EntitiContext.Add(historyInstance); + } + catch (Exception ex) + { + logger.LogError(ex, $"Ошибка при добавлении объекта в историю {historyType.Name}"); + } } @@ -150,11 +155,34 @@ namespace PARR.DAL.Services.Abstracts } + /// + /// Заполнить поле в истории + /// + /// + /// + /// + /// + private void FillHistoryProp(ref object historyInstance, string propName, T value) + { + var histProp = historyInstance.GetType().GetProperty(propName); + if (histProp == null) + { + logger.LogError($"При добавлении истории, не найдено свойство ${propName}"); + return; + } + + // сравним типы + if (histProp.PropertyType != typeof(T)) + { + logger.LogError($"При добавлении истории, не совпадают типы у свойства {propName}, {histProp.PropertyType.Name}!={typeof(T).Name}"); + return; + } + + histProp.SetValue(historyInstance, value); + } - - - + #region test, comments //private void SaveHistory(EntityEntry obj) //{ // // пока просто попробуем для шаблонов @@ -207,8 +235,7 @@ namespace PARR.DAL.Services.Abstracts //} - - + #endregion public virtual async Task CreateAsync(T obj)