实体框架Rest API更改实体

时间:2014-07-10 12:13:35

标签: c# asp.net-mvc entity-framework rest

我有一个存储在数据库中的实体,我试图通过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。

如果有人能帮我解决这个问题。提前谢谢你。

1 个答案:

答案 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)
        }
    }
}