0

我有这个对象

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

在这里,如果它在范围内,我将 Iteration 设置为活动,这是在创建新迭代(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);
}

现在问题出在 Active 字段上,我在创建新迭代时检查它。但我希望它随时自动更改,而不仅仅是在创建时,我该怎么做?例如,日期发生了变化,并且有一个新的检查会更改活动的迭代。

4

2 回答 2

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; } 
    }
}
于 2019-07-12T20:41:30.327 回答
0

我认为您在这里需要的是一个不断运行并不时检查迭代的服务。

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

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

于 2019-07-12T14:33:56.870 回答