当天结束后重置数据库上的值

时间:2016-12-18 07:31:36

标签: c# entity-framework

我有实体框架项目,我希望在更改日期时重置值,或者明天将值重置为0.我有两个表名为目标和计算。目标表有goalId,calorieToday,calorieGoal和Calculation表有goalId,date和amount。我想重置calorieToday和当天更改时的金额,它适用于背景。因此,当用户再次打开明天的应用程序时,calorieToday和金额值将变为0.

这是在GoalDataContext中:

public DbSet<Goal> Goals { get; set; }
public DbSet<Calculation> Calculations { get; set; }

编辑: 我想要的是当天变化时擦除卡路里的所有价值。每天,卡路里今天的价值在改变一天后变为0。目标的goalId是主键,也是计算的外键

2 个答案:

答案 0 :(得分:0)

如果要在DataContext / Database中输入,则必须将更改写入DataContext / Database。请参阅:update record with entity framework

要重置CaloryToday你需要知道的目标,何时。 当用户启动应用程序时,您可以检查是否存在当天的计算。如果没有,那就是新的一天,卡路里今天应该重置。

Goal goal = (Goal of the current user)

DateTime currentDay = DateTime.Now.Date;
var date = GetCalculationByGoalId(goal.GoalID).Max(p => p.Date);
if(date < currentDate) {
    ResetGoal(goal);
}

答案 1 :(得分:0)

好的,所以我得到了我想做的事。 我今天更换了每卡路里,表格上的金额值变为0。

public static void ResetItem()
    {
        using (var db = new GoalDataContext())
        {
            foreach (var item in db.Goals)
                item.calorieToday = 0;

            foreach (var item2 in db.Calculations)
            {                    
                item2.amount = 0;
                db.Calculations.Remove(item2);
            }                   

            db.SaveChanges();
        }
    }

然后在MainPage部分,我写了这段代码

        private void CalorieTracker_Loaded(object sender, RoutedEventArgs e)
    {
        DateTime currentTimeStamp = new DateTime();
        using (var db = new GoalDataContext())
        {
            foreach (var datenow in db.Calculations)
                currentTimeStamp = datenow.date;
        }
        DateTime currentNow = DateTime.Now;
        int changeDay = currentNow.Day;
        if (currentTimeStamp.Day != changeDay)
        {
            DataContextHelper.ResetItem();
        }

        //other stuff's here
    }

它已经过测试,它的工作!白天变化后,卡路里今日值将重置。比较表格和现在的日期。