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

Posted

技术标签:

【中文标题】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 【发布时间】:2022-01-02 16:15:51 【问题描述】:

我正在使用 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 是一对一的关系

任务表

身份证 截止日期 开始日期 结束日期

事务日志

MandateId(密钥) 原始数据

视图模型(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 数据会同时插入,所以我想将 Mandate 中的 DueDate、StartDate、EndDate 作为 JSON RawData 自动插入 TransactionLog 的 RawData:

RawData = ???

我如何做到这一点?

谢谢

【问题讨论】:

【参考方案1】:

您可以使用System.Text.Json 中的JsonSerializer.Serialize 方法来执行此操作。

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

【讨论】:

Raw data的数据类型应该还是字符串吗? 是的,因为Serialize方法的返回类型是字符串。 如果您想将 Json 数据作为 C# 对象取回,您可以通过将 RawData 作为参数传递来使用 Deserialize 方法

以上是关于ASP.NET Core Web API - 如何将属性组合作为原始数据存储到另一个模型的单个列中的主要内容,如果未能解决你的问题,请参考以下文章

带有 EF Core 更新实体的 ASP.Net 核心 Web Api 如何

如何在 ASP.NET Core Web API 中发布对象列表

Asp.Net Core Web API 应用程序:如何更改监听地址?

ASP.Net Core Web API 如何返回 File。

如何使 ASP.NET Core Web API 操作异步执行?

如何注销或过期 ASP.NET Core Web API 的 JWT 令牌?