feat(dal): сохраняет историю изменений
This commit is contained in:
@@ -3,9 +3,7 @@ using Microsoft.EntityFrameworkCore.ChangeTracking;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using PARR.DAL.Context;
|
using PARR.DAL.Context;
|
||||||
using PARR.DAL.DomainModels;
|
using PARR.DAL.DomainModels;
|
||||||
using PARR.DAL.Models;
|
|
||||||
using PARR.DAL.Models.Base;
|
using PARR.DAL.Models.Base;
|
||||||
using PARR.DAL.Models.Base.History;
|
|
||||||
using PARR.DAL.Models.Base.History.Base;
|
using PARR.DAL.Models.Base.History.Base;
|
||||||
using PARR.DAL.Services.Interfaces.Base;
|
using PARR.DAL.Services.Interfaces.Base;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
@@ -107,13 +105,20 @@ namespace PARR.DAL.Services.Abstracts
|
|||||||
// Заполняем поля истории, полями которые есть в исходной таблице
|
// Заполняем поля истории, полями которые есть в исходной таблице
|
||||||
FillHistoryProps(obj, ref historyInstance, historyProps);
|
FillHistoryProps(obj, ref historyInstance, historyProps);
|
||||||
|
|
||||||
|
|
||||||
// Заполняем поля интерфейса IHistoryTable
|
// Заполняем поля интерфейса IHistoryTable
|
||||||
|
FillHistoryProp(ref historyInstance, nameof(IHistoryTable.DateAddedToHistory), DateTimeOffset.UtcNow);
|
||||||
|
|
||||||
// Заполняем Id
|
// Заполняем Id
|
||||||
|
FillHistoryProp(ref historyInstance, nameof(IBase.Id), Guid.NewGuid());
|
||||||
|
|
||||||
|
try
|
||||||
// EntitiContext.Add(historyInstance);
|
{
|
||||||
|
EntitiContext.Add(historyInstance);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
logger.LogError(ex, $"Ошибка при добавлении объекта в историю {historyType.Name}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -150,11 +155,34 @@ namespace PARR.DAL.Services.Abstracts
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Заполнить поле в истории
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// <param name="historyInstance"></param>
|
||||||
|
/// <param name="propName"></param>
|
||||||
|
/// <param name="value"></param>
|
||||||
|
private void FillHistoryProp<T>(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)
|
//private void SaveHistory(EntityEntry obj)
|
||||||
//{
|
//{
|
||||||
// // пока просто попробуем для шаблонов
|
// // пока просто попробуем для шаблонов
|
||||||
@@ -207,8 +235,7 @@ namespace PARR.DAL.Services.Abstracts
|
|||||||
|
|
||||||
|
|
||||||
//}
|
//}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public virtual async Task<bool> CreateAsync(T obj)
|
public virtual async Task<bool> CreateAsync(T obj)
|
||||||
|
|||||||
Reference in New Issue
Block a user