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。