根据日期自动更改值

时间:2019-07-12 13:43:45

标签: c# asp.net-web-api asp.net-core-2.2

我有这个对象

public class Iteration
{
    public int Id { get; set; }
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public bool Active { get; set; }
}

它存储的值如下:

Id: 1
Start 10-07-2019
End 17-07-2019
Active: true

如果在此范围内,这是在创建新迭代(POST请求)时,将“迭代”设置为活动状态。

public async Task<ActionResult> AddIteration([FromBody]IterationDTO iterationDTO)
{
    // Set active if current date is in the added range
    if (DateTime.Now.Date >= iterationDTO.Start.Date && DateTime.Now.Date <= iterationDTO.End.Date)
    {
        iterationDTO.Active = true;
    }
    DB.Set<Iteration>().Add(iterationDTO);
    await DB.SaveChangesAsync();
    return Ok(iterationDTO);
}

现在问题出在活动字段,我在创建新迭代时对其进行了检查。但是我希望它不仅可以在创建时随时更改,该如何做?例如,日期更改,并且有新的检查更改了活动的迭代。

2 个答案:

答案 0 :(得分:3)

我认为您正在使更新数据库条目变得复杂,因为您始终可以根据startend属性来计算该值。

如果您需要在后端访问扩展,只需在模型上创建扩展

public static class IterationExtensions {
    public static bool Active(this Iteration iteration)
    {
        return DateTime.Now.Date >= iteration.Start.Date && DateTime.Now.Date <= iteration.End.Date;
    }
}

或在将其发送到客户端之前将其映射到ViewModel:

public class IterationViewModel
{
    public int Id { get; set; }
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public bool Active 
    { 
        get { return DateTime.Now.Date >= this.Start.Date && DateTime.Now.Date <= this.End.Date; } 
    }
}

答案 1 :(得分:0)

我认为您需要的是一项服务,该服务会不断运行并不时检查迭代。

例如,您可以创建一个Windows服务,该服务每24小时验证一次迭代,如果迭代已过期,则将其停用。无论如何,您都必须创建一个更新方法。

检查此链接以获取帮助: https://stackify.com/creating-net-core-windows-services/