代码之家  ›  专栏  ›  技术社区  ›  ev vk

自动满足条件后的实体框架更新字段

  •  0
  • ev vk  · 技术社区  · 7 年前

    我首先使用实体框架代码,然后使用C#中的ASP.NET MVC。我有一张桌子:

    public class Project
    {
        public Guid Id { get; set; }
        public Guid UserId { get; set; }
        [Required]
        public DateTime CreationDate{ get; set; }
        [Required]
        public DateTime EndDate { get; set; }        
        [Required]
        public bool Active{ get; set; }
    
    }
    

    我的问题是,给定上述字段,如何更新 Active 字段,在 EndDate 通过?

    例如,结束日期是08/04/2018,今天是08/05/2018,那么Active=false。

    在这种情况下,请考虑性能的重要性。每个用户创建一个其他用户可以看到的项目。

    谢谢您。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Ugo Okoro    7 年前

    试着做 Active 字段计算列。

    [DatabaseGenerated(DatabaseGenerationOption.Computed)]
    public bool Active { get { return [condition goes here]; } }
    
        2
  •  2
  •   marc_s    7 年前

    这个 不是 唯一的办法。使用一个适合您的需要/资源(您可以访问的内容-例如,SQL Server代理)。这将从EF/application中去掉一些东西(此示例中的所有工作都在SQL Server中完成)。

    一个简单的存储过程可以是:

    // Expire after current date
    UPDATE [insert your table name here] 
    SET Active = 0 
    WHERE DATEDIFF(DAY, EndDate, GETDATE()) > 0;
    

    是的,你可以 schedule a stored procedure to run as a JOB

    所以假设您命名了存储过程 UpdateStatus ,你的工作 command 会是 EXEC dbo.UpdateStatus .

    嗯。。。