ASP.NET Core Web API - 如何将属性组合作为原始数据存储到另一个模型的单个列中

ASP.NET Core Web API - How to store combination of attributes as raw data into a single column of another Model

我正在使用 ASP.NET Core Web API。我有这些型号:

public abstract class EntityBase
{
    [Key]
    public int Id { get; set; }
}

public class Mandate : EntityBase
{
    public DateTime DueDate { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public virtual TransactionLog TransactionLog { get; set; }
}

public class TransactionLog
{
    [Key, ForeignKey("Mandate")]
    public int? MandateId { get; set; }

    public string RawData { get; set; }
    public virtual Mandate Mandate { get; set; }
}

模型:Mandate 和 TransactionLog

Mandate 与 TransactionLog 是一对一的关系

授权Table

事务日志

视图模型(Dto):

public class MandateDto
{
    public DateTime DueDate { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public int? MandateId { get; set; }
    public string? RawData { get; set; }
}

实体映射器:

public class EntityMapper
{
    public Mandate FromMandateDtoToMandate(MandateDto mandate)
    {
        return new Mandate
        {
            DueDate = mandate.DueDate,
            StartDate = mandate.StartDate,
            EndDate = mandate.EndDate
        };
    }

    public TransactionLog FromMandateDtoToTransactionLog(MandateDto mandate)
    {
        return new TransactionLog
        {
            RawData = ???,
        };
    }
}

授权服务:

    public async Task<Mandate> Post(MandateDto mandate)
    {
        var mapper = new EntityMapper();
        var mandate = mapper.FromMandateDtoToMandate(mandate);
        var transaction = mapper.FromMandateDtoToTransactionLog(mandate);

        try
        {
            await _unitOfWork.MandateRepository.Insert(mandate);
            await _unitOfWork.TransactionRepository.Insert(transaction);
            await _unitOfWork.SaveChangesAsync();
        }
        catch (Exception e)
        {
            throw new Exception(e.Message);
        }

        return mandate;
        return transaction;
    }

如前所述,Mandate 与 TransactionLog 具有一对一的关系。 由于同时插入 Mandate 和 TransactionLog 数据,我想自动将 DueDate、StartDate、EndDate 从 Mandate 插入到 TransactionLog 的 RawData 中,如 JSON RawData:

RawData = ???

如何实现?

谢谢

您可以使用 System.Text.Json 中的 JsonSerializer.Serialize 方法来做到这一点。

您可以阅读 this 了解更多信息