我正在使用C#中的Entity Framework代码优先和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
字段?
例如,结束日期为2018年8月4日,今天为2018年8月5日,则Active = false。
请注意,在这种情况下,性能至关重要。每个用户创建一个其他用户可以看到的项目。
谢谢。
答案 0 :(得分:2)
这不是唯一的方法。使用适合您需求/资源的资源(您可以访问的资源-例如SQL Server代理)。这使EF /应用程序摆脱了麻烦(此示例中的所有操作均在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
。
Hth ...
答案 1 :(得分:1)
尝试将Active
字段设为计算列。
[DatabaseGenerated(DatabaseGenerationOption.Computed)]
public bool Active { get { return [condition goes here]; } }