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

时间:2018-08-04 16:39:12

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

我正在使用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。

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

谢谢。

2 个答案:

答案 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]; } }