我有一个存储在数据库中的实体,我试图通过api公开它以进行select update和delete。问题是实体的最终形状与存储的形状不同。如何合并代码来做到这一点。
实体是ScheduleTemplate
public int id { get; set; }
public int templateId { get; set; }
public int resourceId { get; set; }
public int titleId { get; set; }
public int dow { get; set; }
public int duration { get; set; }
public string startTimeStr { get; set; }
但需要暴露的是上面但是我想要使用的持续时间和StartimeStr字段而不是dow,而是使用它们来计算两个字段StarDate和EndDate。
其中 startdate =相对于当前星期几(dow)的日期,starttimeStr为日期时间。 Enddate = startdate + duration(分钟)
我希望这是完成方式。我们需要在发送到客户端时派生startdate / enddate,并且需要从startdate / enddate从客户端接收到保存时派生dow,startimestr和duration。
如果有人能帮我解决这个问题。提前谢谢你。
答案 0 :(得分:0)
你需要的只是某种转换器模式,它应该是双向的:
public class EntityViewModel
{
public int id { get; set; }
public int templateId { get; set; }
public int resourceId { get; set; }
public int titleId { get; set; }
public int dow { get; set; }
public DateTime startDate { get; set; }
public DateTime endDate { get; set; }
}
public interface IEntityConverter
{
Entity Convert(ViewModel viewModel);
ViewModel Convert(Entity entity);
}
public class EntityConverter
{
public Entity Convert(EntityViewModel viewModel)
{
return new Entity
{
id = viewModel.id,
templateId = viewModel.templateId,
resourceId = viewModel.resourceId,
titleId = viewModel.titleId,
dow = viewModel.dow,
startTimeStr = viewModel.startDate.ToString(),
duration = (int)((viewModel.endDate - viewModel.startDate).Ticks)
};
}
public EntityViewModel Convert(Entity entity)
{
var startDate = DateTime.Parse(entity.startTimeStr);
return new EntityViewModel
{
id = entity.id,
templateId = entity.templateId,
resourceId = entity.resourceId,
titleId = entity.titleId,
dow = entity.dow,
startDate = startDate,
endDate = startDate.AddTicks(entity.duration)
}
}
}